buninu-browser 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (830) hide show
  1. package/AGENTS.md +13 -0
  2. package/Architecture.md +601 -0
  3. package/LICENSE +21 -0
  4. package/LICENSES/Apache-2.0.txt +202 -0
  5. package/LICENSES/BSD-3-Clause-Skia.txt +29 -0
  6. package/LICENSES/Bitstream-Vera.txt +44 -0
  7. package/LICENSES/CC-BY-4.0.txt +396 -0
  8. package/LICENSES/OFL-1.1.txt +91 -0
  9. package/LICENSES/README.md +9 -0
  10. package/LICENSES/acorn.txt +21 -0
  11. package/LICENSES/chromium.txt +27 -0
  12. package/LICENSES/dropflow.txt +19 -0
  13. package/LICENSES/emscripten.txt +102 -0
  14. package/LICENSES/freetype.txt +169 -0
  15. package/LICENSES/happy-dom.txt +22 -0
  16. package/LICENSES/harfbuzz.txt +42 -0
  17. package/LICENSES/icu.txt +512 -0
  18. package/LICENSES/libjpeg-ijg.txt +260 -0
  19. package/LICENSES/libjpeg-turbo.txt +147 -0
  20. package/LICENSES/libpng.txt +134 -0
  21. package/LICENSES/libwebp.txt +30 -0
  22. package/LICENSES/ses-aura.txt +16 -0
  23. package/LICENSES/ses-caja.txt +13 -0
  24. package/LICENSES/ses-corejs.txt +19 -0
  25. package/LICENSES/ses-v8.txt +9 -0
  26. package/LICENSES/ses.txt +201 -0
  27. package/LICENSES/termdom.txt +21 -0
  28. package/LICENSES/wasmpeg.txt +501 -0
  29. package/LICENSES/woff2.txt +19 -0
  30. package/LICENSES/wuffs.txt +211 -0
  31. package/LICENSES/zlib.txt +22 -0
  32. package/Linux +0 -0
  33. package/PORTING.md +825 -0
  34. package/README.md +283 -0
  35. package/THIRD_PARTY_NOTICES.md +224 -0
  36. package/bunfig.toml +2 -0
  37. package/buninu-browser.js +65 -0
  38. package/index.js +149 -0
  39. package/lib/cdp-server.js +1424 -0
  40. package/lib/cdp.js +203 -0
  41. package/lib/happy-dom/entities-adapter.js +51 -0
  42. package/lib/happy-dom/image-size-adapter.js +8 -0
  43. package/lib/happy-dom/mime-type-adapter.js +27 -0
  44. package/lib/happy-dom/parser.js +53 -0
  45. package/lib/happy-dom/websocket-adapter.js +62 -0
  46. package/lib/headless-shell.js +362 -0
  47. package/lib/input/hit-test.js +78 -0
  48. package/lib/layout/scroll-viewport.js +53 -0
  49. package/lib/layout/text-layout.js +2236 -0
  50. package/lib/log.js +85 -0
  51. package/lib/network/cookie-jar.js +178 -0
  52. package/lib/network/network-service.js +268 -0
  53. package/lib/network/resolver.js +97 -0
  54. package/lib/paint/display-list.js +359 -0
  55. package/lib/paint/frame.js +88 -0
  56. package/lib/paint/gradient.js +207 -0
  57. package/lib/render-tree/index.js +263 -0
  58. package/lib/render-tree/svg.js +210 -0
  59. package/lib/renderer/bindings.js +1291 -0
  60. package/lib/renderer/compositor.js +123 -0
  61. package/lib/renderer/flags.js +20 -0
  62. package/lib/renderer/host.js +503 -0
  63. package/lib/renderer/main.js +234 -0
  64. package/lib/renderer/module-transform.js +399 -0
  65. package/lib/renderer/page-realm.js +1471 -0
  66. package/lib/renderer/page-renderer.js +1691 -0
  67. package/lib/renderer/script-rewrite.js +232 -0
  68. package/lib/renderer/seccomp.js +215 -0
  69. package/lib/renderer/syscall-numbers.js +139 -0
  70. package/lib/style/computed-style.js +2053 -0
  71. package/package.json +39 -0
  72. package/patches/happy-dom/0001-use-bun-entity-adapter.patch +15 -0
  73. package/patches/happy-dom/0002-use-bun-platform-adapters.patch +69 -0
  74. package/patches/happy-dom/README.md +38 -0
  75. package/test/chromium-headless-shell +5 -0
  76. package/test/compositor.test.js +154 -0
  77. package/test/computed-style.test.js +434 -0
  78. package/test/display-list.test.js +128 -0
  79. package/test/entities-adapter.test.js +43 -0
  80. package/test/fixtures/fake-renderer.js +26 -0
  81. package/test/fixtures/seccomp-child.js +32 -0
  82. package/test/fixtures/video.mp4 +0 -0
  83. package/test/flex.test.js +150 -0
  84. package/test/gradient.test.js +56 -0
  85. package/test/grid.test.js +253 -0
  86. package/test/happy-dom-platform-adapters.test.js +18 -0
  87. package/test/headless-shell.test.js +318 -0
  88. package/test/hit-test.test.js +49 -0
  89. package/test/html-parser.test.js +40 -0
  90. package/test/index.test.js +29 -0
  91. package/test/log.test.js +40 -0
  92. package/test/mobile.test.js +85 -0
  93. package/test/network-service.test.js +214 -0
  94. package/test/page-scripts.test.js +552 -0
  95. package/test/poc-backend.js +189 -0
  96. package/test/poc-backend.test.js +154 -0
  97. package/test/positioning.test.js +112 -0
  98. package/test/render-tree.test.js +103 -0
  99. package/test/renderer-host.test.js +69 -0
  100. package/test/resolver.test.js +51 -0
  101. package/test/script-rewrite.test.js +31 -0
  102. package/test/scroll-viewport.test.js +25 -0
  103. package/test/seccomp.test.js +71 -0
  104. package/test/site-isolation.test.js +74 -0
  105. package/test/svg.test.js +61 -0
  106. package/test/text-layout.test.js +419 -0
  107. package/usr/README.md +20 -0
  108. package/usr/lib/canvaskit/LICENSE +29 -0
  109. package/usr/lib/canvaskit/canvaskit.js +264 -0
  110. package/usr/lib/canvaskit/canvaskit.wasm +0 -0
  111. package/usr/share/fonts/DejaVuSansMono-Bold.ttf +0 -0
  112. package/usr/share/fonts/DejaVuSansMono.ttf +0 -0
  113. package/usr/share/fonts/LICENSE-Apache-2.0.txt +202 -0
  114. package/usr/share/fonts/LICENSE-DejaVu.txt +44 -0
  115. package/usr/share/fonts/LICENSE-OFL-1.1.txt +91 -0
  116. package/usr/share/fonts/NotoColorEmoji.ttf +0 -0
  117. package/usr/share/fonts/NotoColorEmojiFlags.ttf +0 -0
  118. package/usr/share/fonts/NotoSansCJK-Regular.ttc +0 -0
  119. package/usr/share/fonts/NotoSansSymbols-Regular-Subsetted.ttf +0 -0
  120. package/usr/share/fonts/NotoSansSymbols-Regular-Subsetted2.ttf +0 -0
  121. package/usr/share/fonts/Roboto-Regular.ttf +0 -0
  122. package/usr/share/fonts/fonts.json +28 -0
  123. package/vendor/acorn/LICENSE +21 -0
  124. package/vendor/acorn/README.md +309 -0
  125. package/vendor/acorn/dist/acorn.mjs +6313 -0
  126. package/vendor/acorn/package.json +50 -0
  127. package/vendor/happy-dom/.editorconfig +8 -0
  128. package/vendor/happy-dom/.eslintignore +6 -0
  129. package/vendor/happy-dom/.eslintrc.cjs +188 -0
  130. package/vendor/happy-dom/.github/CODEOWNERS +2 -0
  131. package/vendor/happy-dom/.github/FUNDING.yml +1 -0
  132. package/vendor/happy-dom/.github/ISSUE_TEMPLATE/bug_report.md +32 -0
  133. package/vendor/happy-dom/.github/ISSUE_TEMPLATE/custom.md +10 -0
  134. package/vendor/happy-dom/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  135. package/vendor/happy-dom/.github/PULL_REQUEST_TEMPLATE.md +27 -0
  136. package/vendor/happy-dom/.github/workflows/auto-assign.yml +23 -0
  137. package/vendor/happy-dom/.github/workflows/pull_request.yml +53 -0
  138. package/vendor/happy-dom/.github/workflows/release.yml +143 -0
  139. package/vendor/happy-dom/.husky/pre-commit +1 -0
  140. package/vendor/happy-dom/.prettierignore +1 -0
  141. package/vendor/happy-dom/.prettierrc.cjs +6 -0
  142. package/vendor/happy-dom/.vscode/extensions.json +3 -0
  143. package/vendor/happy-dom/CODE_OF_CONDUCT.md +128 -0
  144. package/vendor/happy-dom/CONTRIBUTING.md +147 -0
  145. package/vendor/happy-dom/LICENSE +21 -0
  146. package/vendor/happy-dom/README.md +62 -0
  147. package/vendor/happy-dom/SECURITY.md +12 -0
  148. package/vendor/happy-dom/cspell.json +34 -0
  149. package/vendor/happy-dom/docs/happy-dom-logo.jpg +0 -0
  150. package/vendor/happy-dom/integration-test/.editorconfig +8 -0
  151. package/vendor/happy-dom/integration-test/LICENSE +21 -0
  152. package/vendor/happy-dom/integration-test/README.md +1 -0
  153. package/vendor/happy-dom/integration-test/package.json +24 -0
  154. package/vendor/happy-dom/package-lock.json +15520 -0
  155. package/vendor/happy-dom/package.json +55 -0
  156. package/vendor/happy-dom/packages/@happy-dom/global-registrator/LICENSE +21 -0
  157. package/vendor/happy-dom/packages/@happy-dom/global-registrator/README.md +60 -0
  158. package/vendor/happy-dom/packages/@happy-dom/global-registrator/package.json +52 -0
  159. package/vendor/happy-dom/packages/@happy-dom/global-registrator/register.js +2 -0
  160. package/vendor/happy-dom/packages/@happy-dom/global-registrator/src/GlobalRegistrator.ts +121 -0
  161. package/vendor/happy-dom/packages/@happy-dom/global-registrator/src/index.ts +3 -0
  162. package/vendor/happy-dom/packages/@happy-dom/global-registrator/tsconfig.json +30 -0
  163. package/vendor/happy-dom/packages/@happy-dom/jest-environment/LICENSE +21 -0
  164. package/vendor/happy-dom/packages/@happy-dom/jest-environment/README.md +71 -0
  165. package/vendor/happy-dom/packages/@happy-dom/jest-environment/package.json +93 -0
  166. package/vendor/happy-dom/packages/@happy-dom/jest-environment/src/index.ts +192 -0
  167. package/vendor/happy-dom/packages/@happy-dom/jest-environment/tsconfig.json +30 -0
  168. package/vendor/happy-dom/packages/@happy-dom/node-canvas-adapter/README.md +48 -0
  169. package/vendor/happy-dom/packages/@happy-dom/node-canvas-adapter/package.json +41 -0
  170. package/vendor/happy-dom/packages/@happy-dom/node-canvas-adapter/src/CanvasAdapter.ts +275 -0
  171. package/vendor/happy-dom/packages/@happy-dom/node-canvas-adapter/src/index.ts +1 -0
  172. package/vendor/happy-dom/packages/@happy-dom/server-renderer/LICENSE +21 -0
  173. package/vendor/happy-dom/packages/@happy-dom/server-renderer/README.md +100 -0
  174. package/vendor/happy-dom/packages/@happy-dom/server-renderer/bin/src/happy-dom-sr.ts +30 -0
  175. package/vendor/happy-dom/packages/@happy-dom/server-renderer/package.json +62 -0
  176. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/ServerRenderer.ts +368 -0
  177. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/ServerRendererBrowser.ts +142 -0
  178. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/ServerRendererBrowserWorker.ts +29 -0
  179. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/ServerRendererPage.ts +305 -0
  180. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/ServerRendererPageWorker.ts +55 -0
  181. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/ServerRendererServer.ts +332 -0
  182. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/config/DefaultServerRendererConfiguration.ts +47 -0
  183. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/enums/ServerRendererLogLevelEnum.ts +9 -0
  184. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/enums/ServerRendererModeEnum.ts +8 -0
  185. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/index.ts +19 -0
  186. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/types/IOptionalServerRendererConfiguration.ts +127 -0
  187. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/types/IServerRendererConfiguration.ts +126 -0
  188. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/types/IServerRendererItem.ts +6 -0
  189. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/types/IServerRendererResult.ts +11 -0
  190. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/utilities/BrowserWindowPolyfill.ts +138 -0
  191. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/utilities/HelpPrinter.ts +36 -0
  192. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/utilities/HelpPrinterRows.ts +288 -0
  193. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/utilities/PackageVersion.ts +12 -0
  194. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/utilities/ProcessArgumentsParser.ts +387 -0
  195. package/vendor/happy-dom/packages/@happy-dom/server-renderer/src/utilities/ServerRendererConfigurationFactory.ts +91 -0
  196. package/vendor/happy-dom/packages/happy-dom/LICENSE +21 -0
  197. package/vendor/happy-dom/packages/happy-dom/README.md +42 -0
  198. package/vendor/happy-dom/packages/happy-dom/package.json +58 -0
  199. package/vendor/happy-dom/packages/happy-dom/src/PropertySymbol.ts +431 -0
  200. package/vendor/happy-dom/packages/happy-dom/src/animation/Animation.ts +273 -0
  201. package/vendor/happy-dom/packages/happy-dom/src/animation/AnimationTimeline.ts +15 -0
  202. package/vendor/happy-dom/packages/happy-dom/src/animation/DocumentTimeline.ts +33 -0
  203. package/vendor/happy-dom/packages/happy-dom/src/animation/KeyframeEffect.ts +295 -0
  204. package/vendor/happy-dom/packages/happy-dom/src/async-task-manager/AsyncTaskManager.ts +340 -0
  205. package/vendor/happy-dom/packages/happy-dom/src/async-task-manager/AsyncTaskManagerDebugError.ts +14 -0
  206. package/vendor/happy-dom/packages/happy-dom/src/base64/Base64.ts +97 -0
  207. package/vendor/happy-dom/packages/happy-dom/src/browser/Browser.ts +123 -0
  208. package/vendor/happy-dom/packages/happy-dom/src/browser/BrowserContext.ts +100 -0
  209. package/vendor/happy-dom/packages/happy-dom/src/browser/BrowserFrame.ts +232 -0
  210. package/vendor/happy-dom/packages/happy-dom/src/browser/BrowserPage.ts +205 -0
  211. package/vendor/happy-dom/packages/happy-dom/src/browser/BrowserSettingsFactory.ts +96 -0
  212. package/vendor/happy-dom/packages/happy-dom/src/browser/DefaultBrowserSettings.ts +67 -0
  213. package/vendor/happy-dom/packages/happy-dom/src/browser/detached-browser/DetachedBrowser.ts +129 -0
  214. package/vendor/happy-dom/packages/happy-dom/src/browser/detached-browser/DetachedBrowserContext.ts +103 -0
  215. package/vendor/happy-dom/packages/happy-dom/src/browser/detached-browser/DetachedBrowserFrame.ts +250 -0
  216. package/vendor/happy-dom/packages/happy-dom/src/browser/detached-browser/DetachedBrowserPage.ts +218 -0
  217. package/vendor/happy-dom/packages/happy-dom/src/browser/enums/BrowserErrorCaptureEnum.ts +10 -0
  218. package/vendor/happy-dom/packages/happy-dom/src/browser/enums/BrowserNavigationCrossOriginPolicyEnum.ts +10 -0
  219. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IBrowser.ts +51 -0
  220. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IBrowserContext.ts +44 -0
  221. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IBrowserFrame.ts +112 -0
  222. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IBrowserPage.ts +110 -0
  223. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IBrowserPageViewport.ts +5 -0
  224. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IBrowserSettings.ts +194 -0
  225. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IGoToOptions.ts +17 -0
  226. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IOptionalBrowserPageViewport.ts +5 -0
  227. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IOptionalBrowserSettings.ts +190 -0
  228. package/vendor/happy-dom/packages/happy-dom/src/browser/types/IReloadOptions.ts +27 -0
  229. package/vendor/happy-dom/packages/happy-dom/src/browser/utilities/BrowserExceptionObserver.ts +123 -0
  230. package/vendor/happy-dom/packages/happy-dom/src/browser/utilities/BrowserFrameFactory.ts +106 -0
  231. package/vendor/happy-dom/packages/happy-dom/src/browser/utilities/BrowserFrameNavigator.ts +574 -0
  232. package/vendor/happy-dom/packages/happy-dom/src/browser/utilities/BrowserFrameScriptEvaluator.ts +71 -0
  233. package/vendor/happy-dom/packages/happy-dom/src/browser/utilities/BrowserFrameURL.ts +30 -0
  234. package/vendor/happy-dom/packages/happy-dom/src/browser/utilities/BrowserFrameValidator.ts +84 -0
  235. package/vendor/happy-dom/packages/happy-dom/src/browser/utilities/BrowserPageUtility.ts +56 -0
  236. package/vendor/happy-dom/packages/happy-dom/src/canvas/ICanvasAdapter.ts +63 -0
  237. package/vendor/happy-dom/packages/happy-dom/src/canvas/ICanvasAdapterCaller.ts +9 -0
  238. package/vendor/happy-dom/packages/happy-dom/src/canvas/ICanvasGradient.ts +8 -0
  239. package/vendor/happy-dom/packages/happy-dom/src/canvas/ICanvasPattern.ts +10 -0
  240. package/vendor/happy-dom/packages/happy-dom/src/canvas/ICanvasRenderingContext2D.ts +162 -0
  241. package/vendor/happy-dom/packages/happy-dom/src/canvas/ICanvasShape.ts +7 -0
  242. package/vendor/happy-dom/packages/happy-dom/src/canvas/IImageBitmapOptions.ts +8 -0
  243. package/vendor/happy-dom/packages/happy-dom/src/canvas/ITextMetrics.ts +12 -0
  244. package/vendor/happy-dom/packages/happy-dom/src/canvas/ImageBitmap.ts +162 -0
  245. package/vendor/happy-dom/packages/happy-dom/src/canvas/ImageData.ts +83 -0
  246. package/vendor/happy-dom/packages/happy-dom/src/canvas/OffscreenCanvas.ts +162 -0
  247. package/vendor/happy-dom/packages/happy-dom/src/canvas/TCanvasImage.ts +14 -0
  248. package/vendor/happy-dom/packages/happy-dom/src/canvas/TImageBitmapSource.ts +12 -0
  249. package/vendor/happy-dom/packages/happy-dom/src/clipboard/Clipboard.ts +108 -0
  250. package/vendor/happy-dom/packages/happy-dom/src/clipboard/ClipboardItem.ts +57 -0
  251. package/vendor/happy-dom/packages/happy-dom/src/config/HTMLElementConfig.ts +536 -0
  252. package/vendor/happy-dom/packages/happy-dom/src/config/HTMLElementConfigContentModelEnum.ts +12 -0
  253. package/vendor/happy-dom/packages/happy-dom/src/config/IHTMLElementTagNameMap.ts +181 -0
  254. package/vendor/happy-dom/packages/happy-dom/src/config/ISVGElementTagNameMap.ts +127 -0
  255. package/vendor/happy-dom/packages/happy-dom/src/config/NamespaceURI.ts +8 -0
  256. package/vendor/happy-dom/packages/happy-dom/src/config/SVGElementConfig.ts +70 -0
  257. package/vendor/happy-dom/packages/happy-dom/src/console/IConsole.ts +161 -0
  258. package/vendor/happy-dom/packages/happy-dom/src/console/IVirtualConsoleLogEntry.ts +10 -0
  259. package/vendor/happy-dom/packages/happy-dom/src/console/IVirtualConsoleLogGroup.ts +6 -0
  260. package/vendor/happy-dom/packages/happy-dom/src/console/IVirtualConsolePrinter.ts +58 -0
  261. package/vendor/happy-dom/packages/happy-dom/src/console/VirtualConsole.ts +363 -0
  262. package/vendor/happy-dom/packages/happy-dom/src/console/VirtualConsolePrinter.ts +148 -0
  263. package/vendor/happy-dom/packages/happy-dom/src/console/enums/VirtualConsoleLogLevelEnum.ts +12 -0
  264. package/vendor/happy-dom/packages/happy-dom/src/console/enums/VirtualConsoleLogTypeEnum.ts +29 -0
  265. package/vendor/happy-dom/packages/happy-dom/src/console/utilities/VirtualConsoleLogEntryStringifier.ts +100 -0
  266. package/vendor/happy-dom/packages/happy-dom/src/cookie/CookieContainer.ts +91 -0
  267. package/vendor/happy-dom/packages/happy-dom/src/cookie/DefaultCookie.ts +17 -0
  268. package/vendor/happy-dom/packages/happy-dom/src/cookie/ICookie.ts +14 -0
  269. package/vendor/happy-dom/packages/happy-dom/src/cookie/ICookieContainer.ts +33 -0
  270. package/vendor/happy-dom/packages/happy-dom/src/cookie/IOptionalCookie.ts +16 -0
  271. package/vendor/happy-dom/packages/happy-dom/src/cookie/enums/CookieSameSiteEnum.ts +6 -0
  272. package/vendor/happy-dom/packages/happy-dom/src/cookie/urilities/CookieExpireUtility.ts +16 -0
  273. package/vendor/happy-dom/packages/happy-dom/src/cookie/urilities/CookieStringUtility.ts +119 -0
  274. package/vendor/happy-dom/packages/happy-dom/src/cookie/urilities/CookieURLUtility.ts +27 -0
  275. package/vendor/happy-dom/packages/happy-dom/src/cookie-store/CookieStore.ts +226 -0
  276. package/vendor/happy-dom/packages/happy-dom/src/cookie-store/ICookieStoreDeleteOptions.ts +9 -0
  277. package/vendor/happy-dom/packages/happy-dom/src/cookie-store/ICookieStoreGetOptions.ts +7 -0
  278. package/vendor/happy-dom/packages/happy-dom/src/cookie-store/ICookieStoreItem.ts +13 -0
  279. package/vendor/happy-dom/packages/happy-dom/src/cookie-store/ICookieStoreSetOptions.ts +12 -0
  280. package/vendor/happy-dom/packages/happy-dom/src/css/CSS.ts +63 -0
  281. package/vendor/happy-dom/packages/happy-dom/src/css/CSSRule.ts +84 -0
  282. package/vendor/happy-dom/packages/happy-dom/src/css/CSSRuleTypeEnum.ts +18 -0
  283. package/vendor/happy-dom/packages/happy-dom/src/css/CSSStyleSheet.ts +141 -0
  284. package/vendor/happy-dom/packages/happy-dom/src/css/CSSUnitValue.ts +26 -0
  285. package/vendor/happy-dom/packages/happy-dom/src/css/CSSUnits.ts +31 -0
  286. package/vendor/happy-dom/packages/happy-dom/src/css/MediaList.ts +177 -0
  287. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/CSSPropertyList.ts +1273 -0
  288. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/CSSStyleDeclaration.ts +355 -0
  289. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/ICSSStyleDeclaration.ts +1178 -0
  290. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/computed-style/CSSComputedStyle.ts +502 -0
  291. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/computed-style/config/CSSComputedStyleElementDefault.ts +133 -0
  292. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/computed-style/config/CSSComputedStyleInheritedProperties.ts +39 -0
  293. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/computed-style/config/CSSComputedStyleMeasurementProperties.ts +41 -0
  294. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/property-manager/CSSPropertyManager.ts +641 -0
  295. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/property-manager/parsers/CSSPropertyGetParser.ts +741 -0
  296. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/property-manager/parsers/CSSPropertySetParser.ts +2955 -0
  297. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/property-manager/types/ICSSPropertyMap.ts +5 -0
  298. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/property-manager/types/ICSSPropertyValue.ts +4 -0
  299. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/property-manager/utilities/CSSStringUtility.ts +90 -0
  300. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/property-manager/utilities/CSSValueFormatter.ts +447 -0
  301. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/property-manager/utilities/CSSVariableFormatter.ts +76 -0
  302. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/utilities/CSSMeasurementConverter.ts +79 -0
  303. package/vendor/happy-dom/packages/happy-dom/src/css/declaration/utilities/CSSTextParser.ts +44 -0
  304. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSConditionRule.ts +20 -0
  305. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSContainerRule.ts +34 -0
  306. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSFontFaceRule.ts +45 -0
  307. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSGroupingRule.ts +84 -0
  308. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSKeyframeRule.ts +53 -0
  309. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSKeyframesRule.ts +147 -0
  310. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSMediaRule.ts +50 -0
  311. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSScopeRule.ts +53 -0
  312. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSStyleRule.ts +73 -0
  313. package/vendor/happy-dom/packages/happy-dom/src/css/rules/CSSSupportsRule.ts +30 -0
  314. package/vendor/happy-dom/packages/happy-dom/src/css/style-property-map/CSSKeywordValue.ts +35 -0
  315. package/vendor/happy-dom/packages/happy-dom/src/css/style-property-map/CSSStyleValue.ts +37 -0
  316. package/vendor/happy-dom/packages/happy-dom/src/css/style-property-map/StylePropertyMap.ts +45 -0
  317. package/vendor/happy-dom/packages/happy-dom/src/css/style-property-map/StylePropertyMapReadOnly.ts +128 -0
  318. package/vendor/happy-dom/packages/happy-dom/src/css/utilities/CSSEscaper.ts +87 -0
  319. package/vendor/happy-dom/packages/happy-dom/src/css/utilities/CSSRuleParser.ts +315 -0
  320. package/vendor/happy-dom/packages/happy-dom/src/custom-element/CustomElementReactionStack.ts +91 -0
  321. package/vendor/happy-dom/packages/happy-dom/src/custom-element/CustomElementRegistry.ts +186 -0
  322. package/vendor/happy-dom/packages/happy-dom/src/custom-element/CustomElementUtility.ts +34 -0
  323. package/vendor/happy-dom/packages/happy-dom/src/custom-element/ICustomElementDefinition.ts +16 -0
  324. package/vendor/happy-dom/packages/happy-dom/src/dom/DOMPoint.ts +84 -0
  325. package/vendor/happy-dom/packages/happy-dom/src/dom/DOMPointReadOnly.ts +117 -0
  326. package/vendor/happy-dom/packages/happy-dom/src/dom/DOMRect.ts +92 -0
  327. package/vendor/happy-dom/packages/happy-dom/src/dom/DOMRectList.ts +34 -0
  328. package/vendor/happy-dom/packages/happy-dom/src/dom/DOMRectReadOnly.ts +129 -0
  329. package/vendor/happy-dom/packages/happy-dom/src/dom/DOMStringMap.ts +93 -0
  330. package/vendor/happy-dom/packages/happy-dom/src/dom/DOMStringMapUtility.ts +33 -0
  331. package/vendor/happy-dom/packages/happy-dom/src/dom/DOMTokenList.ts +363 -0
  332. package/vendor/happy-dom/packages/happy-dom/src/dom/IDOMPointInit.ts +6 -0
  333. package/vendor/happy-dom/packages/happy-dom/src/dom/IDOMRectInit.ts +6 -0
  334. package/vendor/happy-dom/packages/happy-dom/src/dom/dom-matrix/DOMMatrix.ts +526 -0
  335. package/vendor/happy-dom/packages/happy-dom/src/dom/dom-matrix/DOMMatrixReadOnly.ts +1608 -0
  336. package/vendor/happy-dom/packages/happy-dom/src/dom/dom-matrix/IDOMMatrixCompatibleObject.ts +24 -0
  337. package/vendor/happy-dom/packages/happy-dom/src/dom/dom-matrix/IDOMMatrixJSON.ts +26 -0
  338. package/vendor/happy-dom/packages/happy-dom/src/dom/dom-matrix/TDOMMatrix2DArray.ts +3 -0
  339. package/vendor/happy-dom/packages/happy-dom/src/dom/dom-matrix/TDOMMatrix3DArray.ts +20 -0
  340. package/vendor/happy-dom/packages/happy-dom/src/dom/dom-matrix/TDOMMatrixInit.ts +8 -0
  341. package/vendor/happy-dom/packages/happy-dom/src/dom-implementation/DOMImplementation.ts +81 -0
  342. package/vendor/happy-dom/packages/happy-dom/src/dom-parser/DOMParser.ts +47 -0
  343. package/vendor/happy-dom/packages/happy-dom/src/event/DataTransfer.ts +128 -0
  344. package/vendor/happy-dom/packages/happy-dom/src/event/DataTransferItem.ts +47 -0
  345. package/vendor/happy-dom/packages/happy-dom/src/event/DataTransferItemList.ts +44 -0
  346. package/vendor/happy-dom/packages/happy-dom/src/event/Event.ts +222 -0
  347. package/vendor/happy-dom/packages/happy-dom/src/event/EventPhaseEnum.ts +7 -0
  348. package/vendor/happy-dom/packages/happy-dom/src/event/EventTarget.ts +396 -0
  349. package/vendor/happy-dom/packages/happy-dom/src/event/IEventInit.ts +5 -0
  350. package/vendor/happy-dom/packages/happy-dom/src/event/IEventListenerOptions.ts +10 -0
  351. package/vendor/happy-dom/packages/happy-dom/src/event/ITouchInit.ts +16 -0
  352. package/vendor/happy-dom/packages/happy-dom/src/event/IUIEventInit.ts +7 -0
  353. package/vendor/happy-dom/packages/happy-dom/src/event/MessagePort.ts +32 -0
  354. package/vendor/happy-dom/packages/happy-dom/src/event/TEventListener.ts +4 -0
  355. package/vendor/happy-dom/packages/happy-dom/src/event/TEventListenerFunction.ts +3 -0
  356. package/vendor/happy-dom/packages/happy-dom/src/event/TEventListenerObject.ts +5 -0
  357. package/vendor/happy-dom/packages/happy-dom/src/event/Touch.ts +40 -0
  358. package/vendor/happy-dom/packages/happy-dom/src/event/UIEvent.ts +32 -0
  359. package/vendor/happy-dom/packages/happy-dom/src/event/events/AnimationEvent.ts +25 -0
  360. package/vendor/happy-dom/packages/happy-dom/src/event/events/ClipboardEvent.ts +22 -0
  361. package/vendor/happy-dom/packages/happy-dom/src/event/events/CloseEvent.ts +25 -0
  362. package/vendor/happy-dom/packages/happy-dom/src/event/events/CookieChangeEvent.ts +25 -0
  363. package/vendor/happy-dom/packages/happy-dom/src/event/events/CustomEvent.ts +53 -0
  364. package/vendor/happy-dom/packages/happy-dom/src/event/events/ErrorEvent.ts +29 -0
  365. package/vendor/happy-dom/packages/happy-dom/src/event/events/FocusEvent.ts +22 -0
  366. package/vendor/happy-dom/packages/happy-dom/src/event/events/HashChangeEvent.ts +25 -0
  367. package/vendor/happy-dom/packages/happy-dom/src/event/events/IAnimationEventInit.ts +7 -0
  368. package/vendor/happy-dom/packages/happy-dom/src/event/events/IClipboardEventInit.ts +6 -0
  369. package/vendor/happy-dom/packages/happy-dom/src/event/events/ICloseEventInit.ts +7 -0
  370. package/vendor/happy-dom/packages/happy-dom/src/event/events/ICookieChangeEventInit.ts +10 -0
  371. package/vendor/happy-dom/packages/happy-dom/src/event/events/ICustomEventInit.ts +5 -0
  372. package/vendor/happy-dom/packages/happy-dom/src/event/events/IErrorEventInit.ts +8 -0
  373. package/vendor/happy-dom/packages/happy-dom/src/event/events/IFocusEventInit.ts +6 -0
  374. package/vendor/happy-dom/packages/happy-dom/src/event/events/IHashChangeEventInit.ts +6 -0
  375. package/vendor/happy-dom/packages/happy-dom/src/event/events/IInputEventInit.ts +9 -0
  376. package/vendor/happy-dom/packages/happy-dom/src/event/events/IKeyboardEventInit.ts +23 -0
  377. package/vendor/happy-dom/packages/happy-dom/src/event/events/IMediaQueryListEventInit.ts +6 -0
  378. package/vendor/happy-dom/packages/happy-dom/src/event/events/IMediaQueryListInit.ts +6 -0
  379. package/vendor/happy-dom/packages/happy-dom/src/event/events/IMessageEventInit.ts +11 -0
  380. package/vendor/happy-dom/packages/happy-dom/src/event/events/IMouseEventInit.ts +21 -0
  381. package/vendor/happy-dom/packages/happy-dom/src/event/events/IPointerEventInit.ts +19 -0
  382. package/vendor/happy-dom/packages/happy-dom/src/event/events/IPopStateEventInit.ts +6 -0
  383. package/vendor/happy-dom/packages/happy-dom/src/event/events/IProgressEventInit.ts +7 -0
  384. package/vendor/happy-dom/packages/happy-dom/src/event/events/IStorageEventInit.ts +10 -0
  385. package/vendor/happy-dom/packages/happy-dom/src/event/events/ISubmitEventInit.ts +6 -0
  386. package/vendor/happy-dom/packages/happy-dom/src/event/events/ITouchEventInit.ts +12 -0
  387. package/vendor/happy-dom/packages/happy-dom/src/event/events/IWheelEventInit.ts +8 -0
  388. package/vendor/happy-dom/packages/happy-dom/src/event/events/InputEvent.ts +28 -0
  389. package/vendor/happy-dom/packages/happy-dom/src/event/events/KeyboardEvent.ts +80 -0
  390. package/vendor/happy-dom/packages/happy-dom/src/event/events/MediaQueryListEvent.ts +23 -0
  391. package/vendor/happy-dom/packages/happy-dom/src/event/events/MediaStreamTrackEvent.ts +22 -0
  392. package/vendor/happy-dom/packages/happy-dom/src/event/events/MessageEvent.ts +33 -0
  393. package/vendor/happy-dom/packages/happy-dom/src/event/events/MouseEvent.ts +52 -0
  394. package/vendor/happy-dom/packages/happy-dom/src/event/events/PointerEvent.ts +51 -0
  395. package/vendor/happy-dom/packages/happy-dom/src/event/events/PopStateEvent.ts +23 -0
  396. package/vendor/happy-dom/packages/happy-dom/src/event/events/ProgressEvent.ts +25 -0
  397. package/vendor/happy-dom/packages/happy-dom/src/event/events/StorageEvent.ts +30 -0
  398. package/vendor/happy-dom/packages/happy-dom/src/event/events/SubmitEvent.ts +22 -0
  399. package/vendor/happy-dom/packages/happy-dom/src/event/events/TouchEvent.ts +34 -0
  400. package/vendor/happy-dom/packages/happy-dom/src/event/events/WheelEvent.ts +30 -0
  401. package/vendor/happy-dom/packages/happy-dom/src/exception/DOMException.ts +21 -0
  402. package/vendor/happy-dom/packages/happy-dom/src/exception/DOMExceptionNameEnum.ts +23 -0
  403. package/vendor/happy-dom/packages/happy-dom/src/fetch/AbortController.ts +25 -0
  404. package/vendor/happy-dom/packages/happy-dom/src/fetch/AbortSignal.ts +182 -0
  405. package/vendor/happy-dom/packages/happy-dom/src/fetch/Fetch.ts +1072 -0
  406. package/vendor/happy-dom/packages/happy-dom/src/fetch/Headers.ts +177 -0
  407. package/vendor/happy-dom/packages/happy-dom/src/fetch/ReadableStreamWrapper.ts +30 -0
  408. package/vendor/happy-dom/packages/happy-dom/src/fetch/Request.ts +492 -0
  409. package/vendor/happy-dom/packages/happy-dom/src/fetch/ResourceFetch.ts +190 -0
  410. package/vendor/happy-dom/packages/happy-dom/src/fetch/Response.ts +439 -0
  411. package/vendor/happy-dom/packages/happy-dom/src/fetch/SyncFetch.ts +717 -0
  412. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/preflight/ICacheablePreflightRequest.ts +7 -0
  413. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/preflight/ICacheablePreflightResponse.ts +7 -0
  414. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/preflight/ICachedPreflightResponse.ts +5 -0
  415. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/preflight/IPreflightResponseCache.ts +33 -0
  416. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/preflight/PreflightResponseCache.ts +94 -0
  417. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/response/CachedResponseStateEnum.ts +5 -0
  418. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/response/ICacheableRequest.ts +7 -0
  419. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/response/ICacheableResponse.ts +11 -0
  420. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/response/ICachedResponse.ts +40 -0
  421. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/response/IResponseCache.ts +37 -0
  422. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/response/IResponseCacheFileSystem.ts +18 -0
  423. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/response/ResponseCache.ts +248 -0
  424. package/vendor/happy-dom/packages/happy-dom/src/fetch/cache/response/ResponseCacheFileSystem.ts +175 -0
  425. package/vendor/happy-dom/packages/happy-dom/src/fetch/certificate/FetchHTTPSCertificate.ts +52 -0
  426. package/vendor/happy-dom/packages/happy-dom/src/fetch/data-uri/DataURIParser.ts +66 -0
  427. package/vendor/happy-dom/packages/happy-dom/src/fetch/multipart/MultipartFormDataParser.ts +174 -0
  428. package/vendor/happy-dom/packages/happy-dom/src/fetch/multipart/MultipartReader.ts +216 -0
  429. package/vendor/happy-dom/packages/happy-dom/src/fetch/preload/PreloadEntry.ts +50 -0
  430. package/vendor/happy-dom/packages/happy-dom/src/fetch/preload/PreloadUtility.ts +33 -0
  431. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/IFetchInterceptor.ts +60 -0
  432. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/IFetchRequestHeaders.ts +9 -0
  433. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/IRequestInit.ts +23 -0
  434. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/IResourceFetchResponse.ts +4 -0
  435. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/IResponseInit.ts +10 -0
  436. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/ISyncResponse.ts +18 -0
  437. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/IVirtualServer.ts +7 -0
  438. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/THeadersInit.ts +3 -0
  439. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/TRequestBody.ts +14 -0
  440. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/TRequestCredentials.ts +1 -0
  441. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/TRequestInfo.ts +4 -0
  442. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/TRequestMode.ts +1 -0
  443. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/TRequestRedirect.ts +1 -0
  444. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/TRequestReferrerPolicy.ts +10 -0
  445. package/vendor/happy-dom/packages/happy-dom/src/fetch/types/TResponseBody.ts +14 -0
  446. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/FetchBodyUtility.ts +284 -0
  447. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/FetchCORSUtility.ts +23 -0
  448. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/FetchRequestHeaderUtility.ts +141 -0
  449. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/FetchRequestReferrerUtility.ts +259 -0
  450. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/FetchRequestValidationUtility.ts +128 -0
  451. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/FetchResponseHeaderUtility.ts +48 -0
  452. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/FetchResponseRedirectUtility.ts +27 -0
  453. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/SyncFetchScriptBuilder.ts +77 -0
  454. package/vendor/happy-dom/packages/happy-dom/src/fetch/utilities/VirtualServerUtility.ts +114 -0
  455. package/vendor/happy-dom/packages/happy-dom/src/file/Blob.ts +163 -0
  456. package/vendor/happy-dom/packages/happy-dom/src/file/File.ts +43 -0
  457. package/vendor/happy-dom/packages/happy-dom/src/file/FileReader.ts +211 -0
  458. package/vendor/happy-dom/packages/happy-dom/src/file/FileReaderEventTypeEnum.ts +9 -0
  459. package/vendor/happy-dom/packages/happy-dom/src/file/FileReaderFormatEnum.ts +7 -0
  460. package/vendor/happy-dom/packages/happy-dom/src/file/FileReaderReadyStateEnum.ts +6 -0
  461. package/vendor/happy-dom/packages/happy-dom/src/form-data/FormData.ts +291 -0
  462. package/vendor/happy-dom/packages/happy-dom/src/history/History.ts +220 -0
  463. package/vendor/happy-dom/packages/happy-dom/src/history/HistoryItemList.ts +72 -0
  464. package/vendor/happy-dom/packages/happy-dom/src/history/HistoryScrollRestorationEnum.ts +5 -0
  465. package/vendor/happy-dom/packages/happy-dom/src/history/IHistoryItem.ts +12 -0
  466. package/vendor/happy-dom/packages/happy-dom/src/html-parser/HTMLParser.ts +920 -0
  467. package/vendor/happy-dom/packages/happy-dom/src/html-serializer/HTMLSerializer.ts +172 -0
  468. package/vendor/happy-dom/packages/happy-dom/src/index.ts +495 -0
  469. package/vendor/happy-dom/packages/happy-dom/src/intersection-observer/IIntersectionObserverInit.ts +16 -0
  470. package/vendor/happy-dom/packages/happy-dom/src/intersection-observer/IntersectionObserver.ts +64 -0
  471. package/vendor/happy-dom/packages/happy-dom/src/intersection-observer/IntersectionObserverEntry.ts +26 -0
  472. package/vendor/happy-dom/packages/happy-dom/src/javascript/IJavaScriptCompiledResult.ts +9 -0
  473. package/vendor/happy-dom/packages/happy-dom/src/javascript/JavaScriptCompiler.ts +381 -0
  474. package/vendor/happy-dom/packages/happy-dom/src/location/Location.ts +319 -0
  475. package/vendor/happy-dom/packages/happy-dom/src/match-media/IMediaQueryRange.ts +5 -0
  476. package/vendor/happy-dom/packages/happy-dom/src/match-media/IMediaQueryRule.ts +4 -0
  477. package/vendor/happy-dom/packages/happy-dom/src/match-media/MediaQueryItem.ts +354 -0
  478. package/vendor/happy-dom/packages/happy-dom/src/match-media/MediaQueryList.ts +133 -0
  479. package/vendor/happy-dom/packages/happy-dom/src/match-media/MediaQueryParser.ts +113 -0
  480. package/vendor/happy-dom/packages/happy-dom/src/match-media/MediaQueryTypeEnum.ts +7 -0
  481. package/vendor/happy-dom/packages/happy-dom/src/module/CSSModule.ts +53 -0
  482. package/vendor/happy-dom/packages/happy-dom/src/module/ECMAScriptModule.ts +194 -0
  483. package/vendor/happy-dom/packages/happy-dom/src/module/ECMAScriptModuleCompiler.ts +961 -0
  484. package/vendor/happy-dom/packages/happy-dom/src/module/JSONModule.ts +58 -0
  485. package/vendor/happy-dom/packages/happy-dom/src/module/ModuleFactory.ts +148 -0
  486. package/vendor/happy-dom/packages/happy-dom/src/module/ModuleURLUtility.ts +199 -0
  487. package/vendor/happy-dom/packages/happy-dom/src/module/UnresolvedModule.ts +81 -0
  488. package/vendor/happy-dom/packages/happy-dom/src/module/enums/ECMAScriptModuleEvaluateStateEnum.ts +7 -0
  489. package/vendor/happy-dom/packages/happy-dom/src/module/types/IECMAScriptModuleCachedResult.ts +9 -0
  490. package/vendor/happy-dom/packages/happy-dom/src/module/types/IECMAScriptModuleCompiledResult.ts +19 -0
  491. package/vendor/happy-dom/packages/happy-dom/src/module/types/IECMAScriptModuleImport.ts +4 -0
  492. package/vendor/happy-dom/packages/happy-dom/src/module/types/IECMAScriptModuleInit.ts +10 -0
  493. package/vendor/happy-dom/packages/happy-dom/src/module/types/IModule.ts +20 -0
  494. package/vendor/happy-dom/packages/happy-dom/src/module/types/IModuleImportMap.ts +10 -0
  495. package/vendor/happy-dom/packages/happy-dom/src/module/types/IModuleImportMapRule.ts +4 -0
  496. package/vendor/happy-dom/packages/happy-dom/src/module/types/IModuleImportMapScope.ts +6 -0
  497. package/vendor/happy-dom/packages/happy-dom/src/module/types/IModuleInit.ts +12 -0
  498. package/vendor/happy-dom/packages/happy-dom/src/module/types/IResolveNodeModules.ts +8 -0
  499. package/vendor/happy-dom/packages/happy-dom/src/mutation-observer/IMutationListener.ts +7 -0
  500. package/vendor/happy-dom/packages/happy-dom/src/mutation-observer/IMutationObserverInit.ts +14 -0
  501. package/vendor/happy-dom/packages/happy-dom/src/mutation-observer/MutationObserver.ts +175 -0
  502. package/vendor/happy-dom/packages/happy-dom/src/mutation-observer/MutationObserverListener.ts +115 -0
  503. package/vendor/happy-dom/packages/happy-dom/src/mutation-observer/MutationRecord.ts +55 -0
  504. package/vendor/happy-dom/packages/happy-dom/src/mutation-observer/MutationTypeEnum.ts +7 -0
  505. package/vendor/happy-dom/packages/happy-dom/src/navigator/MimeType.ts +35 -0
  506. package/vendor/happy-dom/packages/happy-dom/src/navigator/MimeTypeArray.ts +48 -0
  507. package/vendor/happy-dom/packages/happy-dom/src/navigator/Navigator.ts +247 -0
  508. package/vendor/happy-dom/packages/happy-dom/src/navigator/Plugin.ts +61 -0
  509. package/vendor/happy-dom/packages/happy-dom/src/navigator/PluginArray.ts +58 -0
  510. package/vendor/happy-dom/packages/happy-dom/src/nodes/NodeFactory.ts +38 -0
  511. package/vendor/happy-dom/packages/happy-dom/src/nodes/attr/Attr.ts +119 -0
  512. package/vendor/happy-dom/packages/happy-dom/src/nodes/character-data/CharacterData.ts +218 -0
  513. package/vendor/happy-dom/packages/happy-dom/src/nodes/character-data/CharacterDataUtility.ts +68 -0
  514. package/vendor/happy-dom/packages/happy-dom/src/nodes/child-node/ChildNodeUtility.ts +100 -0
  515. package/vendor/happy-dom/packages/happy-dom/src/nodes/child-node/IChildNode.ts +29 -0
  516. package/vendor/happy-dom/packages/happy-dom/src/nodes/child-node/INonDocumentTypeChildNode.ts +7 -0
  517. package/vendor/happy-dom/packages/happy-dom/src/nodes/child-node/NonDocumentChildNodeUtility.ts +37 -0
  518. package/vendor/happy-dom/packages/happy-dom/src/nodes/comment/Comment.ts +36 -0
  519. package/vendor/happy-dom/packages/happy-dom/src/nodes/document/Document.ts +2310 -0
  520. package/vendor/happy-dom/packages/happy-dom/src/nodes/document/DocumentReadyStateEnum.ts +6 -0
  521. package/vendor/happy-dom/packages/happy-dom/src/nodes/document/DocumentReadyStateManager.ts +52 -0
  522. package/vendor/happy-dom/packages/happy-dom/src/nodes/document/VisibilityStateEnum.ts +6 -0
  523. package/vendor/happy-dom/packages/happy-dom/src/nodes/document-fragment/DocumentFragment.ts +208 -0
  524. package/vendor/happy-dom/packages/happy-dom/src/nodes/document-type/DocumentType.ts +70 -0
  525. package/vendor/happy-dom/packages/happy-dom/src/nodes/element/Element.ts +1842 -0
  526. package/vendor/happy-dom/packages/happy-dom/src/nodes/element/ElementEventAttributeUtility.ts +96 -0
  527. package/vendor/happy-dom/packages/happy-dom/src/nodes/element/HTMLCollection.ts +228 -0
  528. package/vendor/happy-dom/packages/happy-dom/src/nodes/element/NamedNodeMap.ts +274 -0
  529. package/vendor/happy-dom/packages/happy-dom/src/nodes/element/NamedNodeMapProxyFactory.ts +127 -0
  530. package/vendor/happy-dom/packages/happy-dom/src/nodes/element/THTMLCollectionListener.ts +6 -0
  531. package/vendor/happy-dom/packages/happy-dom/src/nodes/element/TNamedNodeMapListener.ts +3 -0
  532. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-anchor-element/HTMLAnchorElement.ts +439 -0
  533. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-area-element/HTMLAreaElement.ts +426 -0
  534. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-audio-element/Audio.ts +28 -0
  535. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-audio-element/HTMLAudioElement.ts +10 -0
  536. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-base-element/HTMLBaseElement.ts +64 -0
  537. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-body-element/HTMLBodyElement.ts +161 -0
  538. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-br-element/HTMLBRElement.ts +7 -0
  539. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-button-element/HTMLButtonElement.ts +406 -0
  540. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-canvas-element/CanvasCaptureMediaStreamTrack.ts +51 -0
  541. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-canvas-element/HTMLCanvasElement.ts +304 -0
  542. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-d-list-element/HTMLDListElement.ts +7 -0
  543. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-data-element/HTMLDataElement.ts +25 -0
  544. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-data-list-element/HTMLDataListElement.ts +28 -0
  545. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-details-element/HTMLDetailsElement.ts +112 -0
  546. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-dialog-element/HTMLDialogElement.ts +104 -0
  547. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-div-element/HTMLDivElement.ts +7 -0
  548. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-document/HTMLDocument.ts +82 -0
  549. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-element/HTMLElement.ts +1149 -0
  550. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-element/HTMLElementUtility.ts +119 -0
  551. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-embed-element/HTMLEmbedElement.ts +90 -0
  552. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-field-set-element/HTMLFieldSetElement.ts +165 -0
  553. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-form-element/HTMLFormControlsCollection.ts +35 -0
  554. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-form-element/HTMLFormElement.ts +675 -0
  555. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-form-element/RadioNodeList.ts +25 -0
  556. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-form-element/THTMLFormControlElement.ts +16 -0
  557. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-head-element/HTMLHeadElement.ts +7 -0
  558. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-heading-element/HTMLHeadingElement.ts +7 -0
  559. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-hr-element/HTMLHRElement.ts +7 -0
  560. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-html-element/HTMLHtmlElement.ts +7 -0
  561. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-hyperlink-element/HTMLHyperlinkElementUtility.ts +329 -0
  562. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-hyperlink-element/IHTMLHyperlinkElement.ts +19 -0
  563. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-iframe-element/HTMLIFrameElement.ts +460 -0
  564. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-image-element/HTMLImageElement.ts +500 -0
  565. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-image-element/Image.ts +33 -0
  566. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-input-element/FileList.ts +34 -0
  567. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-input-element/HTMLInputElement.ts +1550 -0
  568. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-input-element/HTMLInputElementDateUtility.ts +50 -0
  569. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-input-element/HTMLInputElementSelectionDirectionEnum.ts +6 -0
  570. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-input-element/HTMLInputElementSelectionModeEnum.ts +7 -0
  571. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-input-element/HTMLInputElementValueSanitizer.ts +211 -0
  572. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-input-element/HTMLInputElementValueStepping.ts +92 -0
  573. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-label-element/HTMLLabelElement.ts +128 -0
  574. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-label-element/HTMLLabelElementUtility.ts +45 -0
  575. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-legend-element/HTMLLegendElement.ts +27 -0
  576. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-li-element/HTMLLIElement.ts +31 -0
  577. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-link-element/HTMLLinkElement.ts +501 -0
  578. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-map-element/HTMLMapElement.ts +47 -0
  579. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/HTMLMediaElement.ts +906 -0
  580. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/IMediaTrackCapabilities.ts +21 -0
  581. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/IMediaTrackSettings.ts +5 -0
  582. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/MediaStream.ts +114 -0
  583. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/MediaStreamTrack.ts +182 -0
  584. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/RemotePlayback.ts +47 -0
  585. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/TextTrack.ts +156 -0
  586. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/TextTrackCue.ts +51 -0
  587. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/TextTrackCueList.ts +37 -0
  588. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/TextTrackKindEnum.ts +9 -0
  589. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/TextTrackList.ts +182 -0
  590. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/TimeRanges.ts +73 -0
  591. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/VTTCue.ts +80 -0
  592. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-media-element/VTTRegion.ts +15 -0
  593. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-menu-element/HTMLMenuElement.ts +7 -0
  594. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-meta-element/HTMLMetaElement.ts +80 -0
  595. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-meter-element/HTMLMeterElement.ts +216 -0
  596. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-mod-element/HTMLModElement.ts +54 -0
  597. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-o-list-element/HTMLOListElement.ts +83 -0
  598. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-object-element/HTMLObjectElement.ts +223 -0
  599. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-opt-group-element/HTMLOptGroupElement.ts +53 -0
  600. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-option-element/HTMLOptionElement.ts +192 -0
  601. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-output-element/HTMLOutputElement.ts +179 -0
  602. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-paragraph-element/HTMLParagraphElement.ts +7 -0
  603. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-param-element/HTMLParamElement.ts +7 -0
  604. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-picture-element/HTMLPictureElement.ts +7 -0
  605. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-pre-element/HTMLPreElement.ts +7 -0
  606. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-progress-element/HTMLProgressElement.ts +100 -0
  607. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-quote-element/HTMLQuoteElement.ts +36 -0
  608. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-script-element/HTMLScriptElement.ts +735 -0
  609. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-select-element/HTMLOptionsCollection.ts +69 -0
  610. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-select-element/HTMLSelectElement.ts +779 -0
  611. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-slot-element/HTMLSlotElement.ts +249 -0
  612. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-source-element/HTMLSourceElement.ts +148 -0
  613. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-span-element/HTMLSpanElement.ts +7 -0
  614. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-style-element/HTMLStyleElement.ts +125 -0
  615. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-table-caption-element/HTMLTableCaptionElement.ts +7 -0
  616. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-table-cell-element/HTMLTableCellElement.ts +125 -0
  617. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-table-col-element/HTMLTableColElement.ts +7 -0
  618. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-table-element/HTMLTableElement.ts +343 -0
  619. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-table-row-element/HTMLTableRowElement.ts +149 -0
  620. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-table-section-element/HTMLTableSectionElement.ts +88 -0
  621. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-template-element/HTMLTemplateElement.ts +154 -0
  622. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-text-area-element/HTMLTextAreaElement.ts +649 -0
  623. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-time-element/HTMLTimeElement.ts +27 -0
  624. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-title-element/HTMLTitleElement.ts +48 -0
  625. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-track-element/HTMLTrackElement.ts +164 -0
  626. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-u-list-element/HTMLUListElement.ts +7 -0
  627. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-unknown-element/HTMLUnknownElement.ts +9 -0
  628. package/vendor/happy-dom/packages/happy-dom/src/nodes/html-video-element/HTMLVideoElement.ts +10 -0
  629. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedComputedStyleResult.ts +6 -0
  630. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedElementByIdResult.ts +6 -0
  631. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedElementByTagNameResult.ts +6 -0
  632. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedElementsByTagNameResult.ts +6 -0
  633. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedMatchesResult.ts +6 -0
  634. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedQuerySelectorAllResult.ts +7 -0
  635. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedQuerySelectorResult.ts +6 -0
  636. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedResult.ts +3 -0
  637. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/ICachedStyleResult.ts +6 -0
  638. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/Node.ts +1373 -0
  639. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/NodeDocumentPositionEnum.ts +10 -0
  640. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/NodeList.ts +224 -0
  641. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/NodeTypeEnum.ts +13 -0
  642. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/NodeUtility.ts +330 -0
  643. package/vendor/happy-dom/packages/happy-dom/src/nodes/node/TNodeListListener.ts +1 -0
  644. package/vendor/happy-dom/packages/happy-dom/src/nodes/parent-node/IParentNode.ts +109 -0
  645. package/vendor/happy-dom/packages/happy-dom/src/nodes/parent-node/ParentNodeUtility.ts +334 -0
  646. package/vendor/happy-dom/packages/happy-dom/src/nodes/processing-instruction/ProcessingInstruction.ts +22 -0
  647. package/vendor/happy-dom/packages/happy-dom/src/nodes/shadow-root/ShadowRoot.ts +290 -0
  648. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-animate-element/SVGAnimateElement.ts +8 -0
  649. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-animate-motion-element/SVGAnimateMotionElement.ts +8 -0
  650. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-animate-transform-element/SVGAnimateTransformElement.ts +8 -0
  651. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-animation-element/SVGAnimationElement.ts +94 -0
  652. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-circle-element/SVGCircleElement.ts +72 -0
  653. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-clip-path-element/SVGClipPathElement.ts +34 -0
  654. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-component-transfer-function-element/SVGComponentTransferFunctionElement.ts +167 -0
  655. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-defs-element/SVGDefsElement.ts +8 -0
  656. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-desc-element/SVGDescElement.ts +8 -0
  657. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-element/SVGElement.ts +828 -0
  658. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-ellipse-element/SVGEllipseElement.ts +92 -0
  659. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-blend-element/SVGFEBlendElement.ts +192 -0
  660. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-color-matrix-element/SVGFEColorMatrixElement.ts +204 -0
  661. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-component-transfer-element/SVGFEComponentTransferElement.ts +133 -0
  662. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-composite-element/SVGFECompositeElement.ts +186 -0
  663. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-convolve-matrix-element/SVGFEConvolveMatrixElement.ts +366 -0
  664. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-diffuse-lighting-element/SVGFEDiffuseLightingElement.ts +214 -0
  665. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-displacement-map-element/SVGFEDisplacementMapElement.ts +226 -0
  666. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-distant-light-element/SVGFEDistantLightElement.ts +52 -0
  667. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-drop-shadow-element/SVGFEDropShadowElement.ts +227 -0
  668. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-flood-element/SVGFEFloodElement.ts +113 -0
  669. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-func-a-element/SVGFEFuncAElement.ts +8 -0
  670. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-func-b-element/SVGFEFuncBElement.ts +8 -0
  671. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-func-g-element/SVGFEFuncGElement.ts +8 -0
  672. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-func-r-element/SVGFEFuncRElement.ts +8 -0
  673. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-gaussian-blur-element/SVGFEGaussianBlurElement.ts +214 -0
  674. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-image-element/SVGFEImageElement.ts +173 -0
  675. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-merge-element/SVGFEMergeElement.ts +113 -0
  676. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-merge-node-element/SVGFEMergeNodeElement.ts +32 -0
  677. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-morphology-element/SVGFEMorphologyElement.ts +202 -0
  678. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-offset-element/SVGFEOffsetElement.ts +174 -0
  679. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-point-light-element/SVGFEPointLightElement.ts +72 -0
  680. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-specular-lighting-element/SVGFESpecularLightingElement.ts +237 -0
  681. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-spot-light-element/SVGFESpotLightElement.ts +173 -0
  682. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-tile-element/SVGFETileElement.ts +133 -0
  683. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-fe-turbulence-element/SVGFETurbulenceElement.ts +249 -0
  684. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-filter-element/SVGFilterElement.ts +158 -0
  685. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-foreign-object-element/SVGForeignObjectElement.ts +92 -0
  686. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-g-element/SVGGElement.ts +8 -0
  687. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-geometry-element/SVGGeometryElement.ts +94 -0
  688. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-gradient-element/SVGGradientElement.ts +104 -0
  689. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-graphics-element/SVGGraphicsElement.ts +134 -0
  690. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-image-element/SVGImageElement.ts +188 -0
  691. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-line-element/SVGLineElement.ts +92 -0
  692. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-linear-gradient-element/SVGLinearGradientElement.ts +92 -0
  693. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-m-path-element/SVGMPathElement.ts +32 -0
  694. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-marker-element/SVGMarkerElement.ts +230 -0
  695. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-mask-element/SVGMaskElement.ts +137 -0
  696. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-metadata-element/SVGMetadataElement.ts +8 -0
  697. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-path-element/SVGPathElement.ts +8 -0
  698. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-pattern-element/SVGPatternElement.ts +179 -0
  699. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-polygon-element/SVGPolygonElement.ts +53 -0
  700. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-polyline-element/SVGPolylineElement.ts +53 -0
  701. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-radial-gradient-element/SVGRadialGradientElement.ts +112 -0
  702. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-rect-element/SVGRectElement.ts +132 -0
  703. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-script-element/SVGScriptElement.ts +50 -0
  704. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-set-element/SVGSetElement.ts +8 -0
  705. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-stop-element/SVGStopElement.ts +32 -0
  706. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-style-element/SVGStyleElement.ts +143 -0
  707. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-svg-element/SVGSVGElement.ts +601 -0
  708. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-switch-element/SVGSwitchElement.ts +8 -0
  709. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-symbol-element/SVGSymbolElement.ts +8 -0
  710. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-t-span-element/SVGTSpanElement.ts +8 -0
  711. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-text-content-element/SVGTextContentElement.ts +143 -0
  712. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-text-element/SVGTextElement.ts +8 -0
  713. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-text-path-element/SVGTextPathElement.ts +106 -0
  714. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-text-positioning-element/SVGTextPositioningElement.ts +113 -0
  715. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-title-element/SVGTitleElement.ts +8 -0
  716. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-use-element/SVGUseElement.ts +113 -0
  717. package/vendor/happy-dom/packages/happy-dom/src/nodes/svg-view-element/SVGViewElement.ts +8 -0
  718. package/vendor/happy-dom/packages/happy-dom/src/nodes/text/Text.ts +154 -0
  719. package/vendor/happy-dom/packages/happy-dom/src/nodes/xml-document/XMLDocument.ts +10 -0
  720. package/vendor/happy-dom/packages/happy-dom/src/permissions/PermissionNameEnum.ts +32 -0
  721. package/vendor/happy-dom/packages/happy-dom/src/permissions/PermissionStatus.ts +23 -0
  722. package/vendor/happy-dom/packages/happy-dom/src/permissions/Permissions.ts +59 -0
  723. package/vendor/happy-dom/packages/happy-dom/src/query-selector/ISelectorAttribute.ts +7 -0
  724. package/vendor/happy-dom/packages/happy-dom/src/query-selector/ISelectorMatch.ts +3 -0
  725. package/vendor/happy-dom/packages/happy-dom/src/query-selector/ISelectorPseudo.ts +8 -0
  726. package/vendor/happy-dom/packages/happy-dom/src/query-selector/QuerySelector.ts +849 -0
  727. package/vendor/happy-dom/packages/happy-dom/src/query-selector/SelectorCombinatorEnum.ts +9 -0
  728. package/vendor/happy-dom/packages/happy-dom/src/query-selector/SelectorItem.ts +575 -0
  729. package/vendor/happy-dom/packages/happy-dom/src/query-selector/SelectorParser.ts +699 -0
  730. package/vendor/happy-dom/packages/happy-dom/src/query-selector/TGlobalMatchFunction.ts +12 -0
  731. package/vendor/happy-dom/packages/happy-dom/src/range/IRangeBoundaryPoint.ts +9 -0
  732. package/vendor/happy-dom/packages/happy-dom/src/range/Range.ts +1161 -0
  733. package/vendor/happy-dom/packages/happy-dom/src/range/RangeHowEnum.ts +8 -0
  734. package/vendor/happy-dom/packages/happy-dom/src/range/RangeUtility.ts +118 -0
  735. package/vendor/happy-dom/packages/happy-dom/src/resize-observer/ResizeObserver.ts +33 -0
  736. package/vendor/happy-dom/packages/happy-dom/src/screen/Screen.ts +19 -0
  737. package/vendor/happy-dom/packages/happy-dom/src/screen/ScreenDetailed.ts +17 -0
  738. package/vendor/happy-dom/packages/happy-dom/src/screen/ScreenDetails.ts +27 -0
  739. package/vendor/happy-dom/packages/happy-dom/src/selection/Selection.ts +556 -0
  740. package/vendor/happy-dom/packages/happy-dom/src/selection/SelectionDirectionEnum.ts +7 -0
  741. package/vendor/happy-dom/packages/happy-dom/src/storage/Storage.ts +149 -0
  742. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAngle.ts +310 -0
  743. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAngleTypeEnum.ts +9 -0
  744. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedAngle.ts +100 -0
  745. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedBoolean.ts +80 -0
  746. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedEnumeration.ts +119 -0
  747. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedInteger.ts +97 -0
  748. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedLength.ts +100 -0
  749. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedLengthList.ts +101 -0
  750. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedNumber.ts +101 -0
  751. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedNumberList.ts +101 -0
  752. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedPreserveAspectRatio.ts +100 -0
  753. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedRect.ts +100 -0
  754. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedString.ts +83 -0
  755. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGAnimatedTransformList.ts +101 -0
  756. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGLength.ts +375 -0
  757. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGLengthList.ts +489 -0
  758. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGLengthTypeEnum.ts +15 -0
  759. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGMatrix.ts +429 -0
  760. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGNumber.ts +83 -0
  761. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGNumberList.ts +522 -0
  762. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGPoint.ts +114 -0
  763. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGPointList.ts +526 -0
  764. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGPreserveAspectRatio.ts +176 -0
  765. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGPreserveAspectRatioAlignEnum.ts +15 -0
  766. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGPreserveAspectRatioMeetOrSliceEnum.ts +7 -0
  767. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGRect.ts +200 -0
  768. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGStringList.ts +422 -0
  769. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGTransform.ts +369 -0
  770. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGTransformList.ts +531 -0
  771. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGTransformTypeEnum.ts +11 -0
  772. package/vendor/happy-dom/packages/happy-dom/src/svg/SVGUnitTypes.ts +26 -0
  773. package/vendor/happy-dom/packages/happy-dom/src/tree-walker/NodeFilter.ts +18 -0
  774. package/vendor/happy-dom/packages/happy-dom/src/tree-walker/NodeFilterMask.ts +28 -0
  775. package/vendor/happy-dom/packages/happy-dom/src/tree-walker/NodeIterator.ts +85 -0
  776. package/vendor/happy-dom/packages/happy-dom/src/tree-walker/TNodeFilter.ts +3 -0
  777. package/vendor/happy-dom/packages/happy-dom/src/tree-walker/TreeWalker.ts +339 -0
  778. package/vendor/happy-dom/packages/happy-dom/src/url/URL.ts +45 -0
  779. package/vendor/happy-dom/packages/happy-dom/src/utilities/AttributeUtility.ts +43 -0
  780. package/vendor/happy-dom/packages/happy-dom/src/utilities/ClassMethodBinder.ts +71 -0
  781. package/vendor/happy-dom/packages/happy-dom/src/utilities/StringUtility.ts +47 -0
  782. package/vendor/happy-dom/packages/happy-dom/src/utilities/XMLEncodeUtility.ts +166 -0
  783. package/vendor/happy-dom/packages/happy-dom/src/validity-state/ValidityState.ts +234 -0
  784. package/vendor/happy-dom/packages/happy-dom/src/version.ts +1 -0
  785. package/vendor/happy-dom/packages/happy-dom/src/web-socket/WebSocket.ts +408 -0
  786. package/vendor/happy-dom/packages/happy-dom/src/web-socket/WebSocketReadyStateEnum.ts +8 -0
  787. package/vendor/happy-dom/packages/happy-dom/src/window/BrowserWindow.ts +3074 -0
  788. package/vendor/happy-dom/packages/happy-dom/src/window/CrossOriginBrowserWindow.ts +152 -0
  789. package/vendor/happy-dom/packages/happy-dom/src/window/DetachedWindowAPI.ts +133 -0
  790. package/vendor/happy-dom/packages/happy-dom/src/window/GlobalWindow.ts +90 -0
  791. package/vendor/happy-dom/packages/happy-dom/src/window/INodeJSGlobal.ts +76 -0
  792. package/vendor/happy-dom/packages/happy-dom/src/window/IOptionalTimerLoopsLimit.ts +4 -0
  793. package/vendor/happy-dom/packages/happy-dom/src/window/IScrollToOptions.ts +5 -0
  794. package/vendor/happy-dom/packages/happy-dom/src/window/ITimerLoopsLimit.ts +4 -0
  795. package/vendor/happy-dom/packages/happy-dom/src/window/VMGlobalPropertyScript.ts +59 -0
  796. package/vendor/happy-dom/packages/happy-dom/src/window/Window.ts +67 -0
  797. package/vendor/happy-dom/packages/happy-dom/src/window/WindowBrowserContext.ts +117 -0
  798. package/vendor/happy-dom/packages/happy-dom/src/window/WindowContextClassExtender.ts +288 -0
  799. package/vendor/happy-dom/packages/happy-dom/src/window/WindowPageOpenUtility.ts +200 -0
  800. package/vendor/happy-dom/packages/happy-dom/src/xml-http-request/XMLHttpRequest.ts +577 -0
  801. package/vendor/happy-dom/packages/happy-dom/src/xml-http-request/XMLHttpRequestEventTarget.ts +88 -0
  802. package/vendor/happy-dom/packages/happy-dom/src/xml-http-request/XMLHttpRequestReadyStateEnum.ts +9 -0
  803. package/vendor/happy-dom/packages/happy-dom/src/xml-http-request/XMLHttpRequestResponseDataParser.ts +70 -0
  804. package/vendor/happy-dom/packages/happy-dom/src/xml-http-request/XMLHttpRequestUpload.ts +6 -0
  805. package/vendor/happy-dom/packages/happy-dom/src/xml-http-request/XMLHttpResponseTypeEnum.ts +9 -0
  806. package/vendor/happy-dom/packages/happy-dom/src/xml-parser/XMLParser.ts +744 -0
  807. package/vendor/happy-dom/packages/happy-dom/src/xml-serializer/XMLSerializer.ts +280 -0
  808. package/vendor/happy-dom/turbo.json +52 -0
  809. package/vendor/ses/LICENSE +201 -0
  810. package/vendor/ses/LICENSE-aura +16 -0
  811. package/vendor/ses/LICENSE-caja +13 -0
  812. package/vendor/ses/LICENSE-corejs +19 -0
  813. package/vendor/ses/LICENSE-v8 +9 -0
  814. package/vendor/ses/README.md +968 -0
  815. package/vendor/ses/dist/ses.mjs +15219 -0
  816. package/vendor/ses/package.json +142 -0
  817. package/vendor/wasmpeg/LICENSE +501 -0
  818. package/vendor/wasmpeg/NOTICE +30 -0
  819. package/vendor/wasmpeg/VENDORING.md +35 -0
  820. package/vendor/wasmpeg/dist/cpu.js +2 -0
  821. package/vendor/wasmpeg/dist/cpu.wasm +0 -0
  822. package/vendor/wasmpeg/package.json +45 -0
  823. package/vendor/wasmpeg/source-v1.0.1.tar.gz +0 -0
  824. package/vendor/wasmpeg/src/js/exec.mjs +478 -0
  825. package/vendor/wasmpeg/src/js/ffmpeg.js +94 -0
  826. package/vendor/wasmpeg/src/js/formats.js +84 -0
  827. package/vendor/wasmpeg/src/js/gpu.js +480 -0
  828. package/vendor/wasmpeg/src/js/index.d.ts +154 -0
  829. package/vendor/wasmpeg/src/js/index.js +7 -0
  830. package/vendor/wasmpeg/src/js/wasmpeg.mjs +221 -0
package/AGENTS.md ADDED
@@ -0,0 +1,13 @@
1
+ # AGENTS
2
+
3
+ ## General
4
+ - This project only uses pure JavaScript +/- WASM.
5
+ - Native bindings are generally not allowed in the headless shell itself
6
+ * In the future when it is wrapped into a full browser on each platform, the frontend should stay as thin wrappers just enough to draw rendered content from the headlesss shell
7
+ * Specifically, able to work with ../casty through CDP is an important goal
8
+ - Only use Bun FFI to dlopen libc when other methods are clearly not enough
9
+
10
+ ## Bun
11
+ - Bun doesn't have `bun --check`
12
+ - Bun has many built-in functions; use/check them first before implementing your own
13
+ * "$ Archive ArrayBufferSink Cookie CookieMap CryptoHasher FFI FileSystemRouter Glob Image MD4 MD5 SHA1 SHA224 SHA256 SHA384 SHA512 SHA512_256 JSONC JSON5 JSONL markdown TOML XML YAML Transpiler embeddedFiles S3Client s3 CSRF allocUnsafe argv build concatArrayBuffers connect cron color deepEquals deepMatch deflateSync dns enableANSIColors env escapeHTML fetch file fileURLToPath gc generateHeapSnapshot gunzipSync gzipSync hash indexOfLine inflateSync inspect isMainThread isStandaloneExecutable listen udpSocket main mmap nanoseconds openInEditor password pathToFileURL peek plugin randomUUIDv7 randomUUIDv5 readableStreamToArray readableStreamToArrayBuffer readableStreamToBytes readableStreamToBlob readableStreamToFormData readableStreamToJSON readableStreamToText resolve resolveSync revision semver sql postgres SQL serve sha shrink sliceAnsi sleep sleepSync spawn spawnSync stderr stdin stdout stringWidth stripANSI wrapAnsi Terminal unsafe version WebView which RedisClient redis secrets write zstdCompressSync zstdDecompressSync zstdCompress zstdDecompress"
@@ -0,0 +1,601 @@
1
+ # 以 Bun/JavaScript 建構完整 Headless Browser:架構與實作計畫
2
+
3
+ > 文件版本:0.1
4
+ > 日期:2026-09-27
5
+ > 目標平台:Buninu/Bun 1.4.x
6
+ > 定位:可執行 JavaScript、具備像素級版面配置與截圖能力、可自動化操作的獨立 headless browser;不是 Chromium 的包裝器。
7
+
8
+ ## 1. 結論先行
9
+
10
+ 這個專案可行,但不能把 Happy DOM、TermDOM、Dropflow、CanvasKit 直接「接起來」就稱為瀏覽器。合理的做法是:
11
+
12
+ - **Happy DOM** 作為第一階段的 DOM、HTML、事件、Window、Fetch 與部分 CSSOM/Web API 基底。
13
+ - 建立一棵獨立的 **Render Tree**,將 DOM 與渲染資料結構解耦;這是整個計畫最重要的邊界。
14
+ - **Dropflow** 提供 block/inline/float/文字排版的演算法與測試參考。
15
+ - **TermDOM** 提供 flex/grid/table、選擇器失效、flat-tree、互動與 invalidation 的參考;不能直接沿用其「一格終端字元等於一個 CSS px」的幾何模型。
16
+ - **CanvasKit(Skia WASM)** 負責像素繪製、圖片解碼後呈現、文字與 surface;它不是 layout engine。
17
+ - 網站 JavaScript 使用 Bun/JavaScriptCore,但依信任等級分流:受控內容可使用同 process realm;任意遠端內容必須放在獨立、低權限 Bun renderer process。不可把 `node:vm`、`ShadowRealm` 或 Worker 當成安全邊界。
18
+ - **WPT + 自製 screenshot/reftest** 作為驗收標準,而非以「某些網站看起來能跑」判定完成。
19
+ - 參考 Chromium 的分層:Browser、Renderer、Network、DOM/Style、Layout、PrePaint/Paint、DevTools;保留責任邊界,不照搬 Chromium 的全部工程複雜度。
20
+
21
+ 完整路徑應是:
22
+
23
+ ```mermaid
24
+ flowchart TD
25
+ A["Browser Controller<br/>Bun"] --> B["Network Service"]
26
+ A --> C["Isolated Renderer"]
27
+ C --> D["Happy DOM + Web APIs"]
28
+ D --> E["Style + Render Tree"]
29
+ E --> F["Layout Engine"]
30
+ F --> G["Display List"]
31
+ G --> H["CanvasKit / Skia WASM"]
32
+ A --> I["Headless API / CDP subset"]
33
+ ```
34
+
35
+ ## 2. 「完整」的務實定義
36
+
37
+ 第一個可交付版本不應宣稱與 Chrome 相容。建議把「完整 headless browser v1」定義為:
38
+
39
+ 1. 可載入 HTTP(S)、data URL 與本地受控內容。
40
+ 2. 有正確的 document/frame/navigation/history 基礎生命週期。
41
+ 3. 可執行隔離的 classic script、ES module、timer、Promise、fetch/XHR。
42
+ 4. 支援常用 DOM、事件、Shadow DOM、表單、CSS cascade。
43
+ 5. 支援 block、inline、文字、圖片、absolute、flex、grid、table 的像素 layout。
44
+ 6. `getBoundingClientRect()`、`offset*`、`client*` 與 hit testing 反映 layout 結果。
45
+ 7. 可輸出 PNG、PDF(後續)、DOM snapshot、accessibility snapshot。
46
+ 8. 有 Playwright/Puppeteer 風格 API,並逐步提供 CDP 相容子集。
47
+ 9. 以 origin 隔離、能力式 IPC、網路政策與資源上限防止頁面取得宿主權限。
48
+ 10. 有可重現的 WPT、reftest、crash、timeout 與效能報表。
49
+
50
+ v1 明確不含:完整 WebRTC、DRM、GPU WebGL/WebGPU、所有影音 codec、瀏覽器擴充套件、Chrome UI、100% CSS/HTML/JS 相容性。這些不是「晚一點補幾個 API」,而是各自的大型子專案。
51
+
52
+ ## 3. 本次實測環境與可重現資訊
53
+
54
+ ### 3.1 版本
55
+
56
+ | 項目 | 實測版本/提交 |
57
+ |---|---|
58
+ | Bun | `1.4.2+744846f84` |
59
+ | Happy DOM npm | `20.14.5` |
60
+ | Happy DOM source | `0d4cdbe7442af49d16b49ddf1acf7cc9684ed318` |
61
+ | TermDOM source | `b92f36d5f3d83770f3ea8c38fdeae0a192dc235e` |
62
+ | 平台 | Linux workspace,Bun 執行 `.mjs` 測試 |
63
+
64
+ Bun 執行檔是依 `BUN_TOOLING` 指示安裝並核對 revision;實測範例位於 `happy-test/`,涵蓋 DOM、script、module、HTTP、CSS、image、iframe、canvas adapter 與安全性。
65
+
66
+ ### 3.2 Happy DOM 實測結果
67
+
68
+ | 能力 | 結果 | 工程判讀 |
69
+ |---|---|---|
70
+ | DOM 建立、查詢、文字與 attribute | 通過 | 可作為 v0 Web Platform 骨架 |
71
+ | `getComputedStyle()` | 常用屬性可得 | 有 cascade/value 基礎,但不是 layout |
72
+ | inline classic script | 通過 | 可修改 DOM 與 window |
73
+ | inline ES module | 通過 | 簡單 export 可用 |
74
+ | top-level await | 通過 | 測試回傳 `42` |
75
+ | export destructuring | 通過 | 測得 `{x:1, alias:2}` |
76
+ | external classic script | 載入並執行 | parser-blocking/事件時序仍有問題 |
77
+ | external module + import | 通過 | `/module.js` 匯入 `/dep.js` 後得到 `42` |
78
+ | `fetch()` | 通過 | 同源 JSON 載入成功 |
79
+ | external stylesheet | 通過 | 得到 color、display:flex、width 等 computed values |
80
+ | PNG image metadata | 通過 | 1×1 PNG 得到 naturalWidth/Height = 1 |
81
+ | iframe + iframe script | 通過 | 子文件及 script 可執行 |
82
+ | CanvasAdapter | 通過 | 可注入網站自己的 `<canvas>` backend |
83
+ | geometry | 不通過 | rect、offset、client、scroll 幾何皆為 0 |
84
+ | data URL navigation from `about:blank` | 失敗 | 初始 referrer URL 處理拋出 `TypeError: Invalid URL` |
85
+ | `DOMContentLoaded` 時序 | 有缺陷 | head 外部 script 註冊的 listener 未被觸發 |
86
+ | 不可信 JS 隔離 | 嚴重失敗 | 可透過 constructor escape 取得 Bun `process` |
87
+
88
+ 完整 HTTP 測試觀察:
89
+
90
+ ```text
91
+ HTTP status: 200
92
+ document.readyState: complete
93
+ external classic script: executed
94
+ fetch result: fetched
95
+ external module result: 42
96
+ computed style: color rgb(1, 2, 3), display flex, width 320px
97
+ all geometry: 0
98
+ image: complete, 1 x 1
99
+ iframe: loaded, child script executed
100
+ ```
101
+
102
+ ### 3.3 兩個容易踩到的實務陷阱
103
+
104
+ #### A. 同一 Bun event loop 會死鎖
105
+
106
+ 用同一個 Bun process 啟動 `Bun.serve()`,再讓 Happy DOM 載入該 server 的 parser-blocking 外部資源,測試會卡在 `goto()`。原因是 Happy DOM 某些載入路徑採同步等待,而 server 又需要同一 event loop 處理請求。
107
+
108
+ 處理策略:
109
+
110
+ - 測試 fixture server 放到另一個 process;或
111
+ - 對受控內容使用 Happy DOM virtual server/fetch interceptor;或
112
+ - 正式架構將 Network Service 與 Renderer 分離,所有資源讀取用非同步 IPC。
113
+
114
+ #### B. `node:vm` 不是安全邊界
115
+
116
+ 測試頁面中 `process`、`Bun`、`require` 表面上是 `undefined`,但以下概念的 constructor escape 可取得宿主:
117
+
118
+ ```js
119
+ this.constructor.constructor('return process')()
120
+ ```
121
+
122
+ 實測可讀出 Bun 版本 `1.4.2`。因此:**任何來自網路的 script 都不得在 Buninu PID 1 或持有敏感能力的 controller process 中,以 Happy DOM 的 BrowserWindow/node:vm 執行。**
123
+
124
+ ## 4. 候選專案:該拿什麼、不要拿什麼
125
+
126
+ | 專案 | 應採用 | 不應期待 | 整合方式 |
127
+ |---|---|---|---|
128
+ | Happy DOM | DOM、Window、事件、HTML 元素、fetch、frame/page 雛形、部分 CSSOM/Web API | layout、page painting、安全沙箱 | 初期 authoritative DOM;封裝而非 fork 全部 |
129
+ | Happy DOM HTMLParser | 第一階段 HTML tree construction、基本錯誤恢復、序列化 | 完整 WHATWG tokenizer/tree builder、streaming、JS、CSS、layout | 先包在本專案 parser adapter;以測試量化差距,再決定強化或替換 |
130
+ | TermDOM | flex/grid/table、flat tree、selectors/invalidation、表單與互動測試思路 | 像素精度、網路、JS runtime、圖片 | 移植演算法與測試;輸入改成 RenderNode + float geometry |
131
+ | Dropflow | block/inline/float、line breaking、intrinsic sizing、HarfBuzz shaping、pixel geometry | flex/grid、完整 browser lifecycle | 優先移植 inline/text/block;不要混用其簡化 DOM |
132
+ | CanvasKit | Skia paths、text、image、surface、raster output | CSS cascade、layout、DOM | 實作 DisplayList backend;另做 `<canvas>` adapter |
133
+ | Bun/JSC realm + renderer process | 同 heap 的低成本 DOM access;Bun IPC、timeout、kill、env/cwd/uid/gid 控制 | realm/Worker 本身不是安全 sandbox | 受控內容可同 process;不可信內容以低權限 Bun subprocess 承載 DOM、JS、style、layout |
134
+ | WPT | 跨瀏覽器規範測試與 reftest | 自動告訴你架構怎麼設計 | 建 allowlist/expected-fail dashboard,逐層擴張 |
135
+ | Chromium/Blink | 責任邊界、生命週期、失效模型、測試與安全設計 | 可直接複製到 JS 的小型引擎 | 讀設計與對照原始碼;不要逐行翻譯 C++ |
136
+
137
+ ### 4.1 HTML parser 邊界
138
+
139
+ 目前固定的 Happy DOM `v20.14.5` 使用自己的 `HTMLParser`,並沒有依賴
140
+ parse5。第一階段透過 `lib/happy-dom/parser.js` 建立 authoritative DOM,
141
+ 但不能因此宣稱已有完整 WHATWG HTML parsing 相容性。browser parser 後續
142
+ 仍需要補上或替換為具備以下能力的實作:
143
+
144
+ - streaming bytes → encoding decode → tokenizer;
145
+ - parser 遇到 blocking script 的暫停與恢復;
146
+ - `document.write()` 重入;
147
+ - preload scanner;
148
+ - script、stylesheet 與 DOMContentLoaded/load 的順序狀態機。
149
+
150
+ ## 5. 從 Chromium 借鏡的核心架構
151
+
152
+ Chromium 的價值不在「headless 模式」,而在它把 navigation、network、renderer、Blink lifecycle 和安全權限分開。官方文件明確描述 browser/renderer 多進程、Site Isolation、Network Service,以及 Blink 從 DOM 到 layout tree、PrePaint、paint invalidation 的階段。
153
+
154
+ | Chromium 概念/路徑 | 本專案對應 | 借鏡重點 |
155
+ |---|---|---|
156
+ | Browser process | `browser-controller` | page/context/frame 所有權、process 管理、權限、headless API |
157
+ | RenderProcessHost / renderer | `renderer-worker` | 不可信頁面隔離、IPC、crash recovery |
158
+ | `NavigationRequest` | `navigation-controller` | redirect、commit、abort、same-document navigation 狀態機 |
159
+ | Network Service | `network-service` | cookies、cache、CORS、redirect、proxy、TLS、下載與 policy |
160
+ | Blink DOM/flat tree | Happy DOM + composed-tree adapter | DOM 不等於 render tree;Shadow DOM/slotting 後再渲染 |
161
+ | Blink LayoutObject/fragment tree | `render-tree` + `layout` | layout tree 近似 DOM,但可增刪匿名盒與 pseudo boxes |
162
+ | PrePaint/Paint | `prepaint` + `display-list` | invalidation、clip/transform/property trees、穩定 display items |
163
+ | Skia | CanvasKit | 執行 display list,不承擔 CSS/layout |
164
+ | DevTools Protocol | `cdp-server` | Page/Runtime/DOM/Network/Input/Screenshot 的相容層 |
165
+
166
+ ### 5.1 建議閱讀的 Chromium 原始碼地圖
167
+
168
+ - `content/browser/renderer_host/`:frame、renderer process 與 navigation 的 browser-side 控制。
169
+ - `content/browser/renderer_host/navigation_request.*`:navigation 狀態與 commit 邊界。
170
+ - `content/browser/loader/`:navigation resource loader。
171
+ - `services/network/` 與 `net/`:跨 process network service 與 request stack。
172
+ - `third_party/blink/renderer/core/html/parser/`:HTML parser、script 協調。
173
+ - `third_party/blink/renderer/core/dom/`:DOM、flat tree 與 lifecycle。
174
+ - `third_party/blink/renderer/core/css/`、`core/style/`:解析、cascade 與 computed style。
175
+ - `third_party/blink/renderer/core/layout/`:LayoutObject、constraint space、fragments。
176
+ - `third_party/blink/renderer/core/paint/`:prepaint、invalidation、display items。
177
+ - `third_party/blink/renderer/platform/graphics/`:繪圖抽象。
178
+ - `chrome/browser/headless/` 與 `headless/`:headless embedder、DevTools 與 shell。
179
+
180
+ 不要先研究 compositor/GPU 細節。v1 先做單執行緒 CPU raster 與完整 display list,正確後才做 layers、tiles 與併行 raster。
181
+
182
+ ## 6. 建議 repository 結構
183
+
184
+ ```text
185
+ packages/
186
+ browser-controller/ # Browser、Context、Page、Frame、process lifecycle
187
+ navigation/ # URL、redirect、commit、history、document lifecycle
188
+ network-service/ # fetch、cache、cookie、CORS、TLS、proxy、policy
189
+ renderer-runtime/ # isolated JS runtime、scheduler、bindings
190
+ web-platform/ # Happy DOM adapter、IDL、events、timers、observers
191
+ html-loader/ # streaming parse、script/style coordination
192
+ css-engine/ # parser、cascade、computed values、invalidation
193
+ render-tree/ # DOM/flat tree -> boxes/pseudo/anonymous nodes
194
+ layout-core/ # constraints、fragments、geometry、dirty propagation
195
+ layout-block-inline/ # Dropflow-derived algorithms
196
+ layout-flex-grid/ # TermDOM-derived algorithms
197
+ text-engine/ # shaping、bidi、line breaking、font fallback
198
+ display-list/ # immutable paint commands and property state
199
+ raster-canvaskit/ # CanvasKit backend and image output
200
+ html-canvas/ # website-owned <canvas> adapter
201
+ input/ # hit test、pointer、keyboard、focus、selection
202
+ storage/ # cookie、local/session storage、IndexedDB later
203
+ headless-api/ # native JS API
204
+ cdp-server/ # selected Chrome DevTools Protocol domains
205
+ test-runner/ # WPT、reftest、fixtures、leak/crash/timeout
206
+ apps/
207
+ headless-shell/
208
+ tests/
209
+ unit/
210
+ integration/
211
+ reftest/
212
+ wpt-expectations/
213
+ ```
214
+
215
+ 原則是每一層只有一個 authoritative representation:一棵 DOM、一份 computed style、一棵 render tree、一組 layout fragments、一份 display list。禁止 Happy DOM、Dropflow、TermDOM 各自保有互相同步的 DOM。
216
+
217
+ ## 7. 核心資料流與生命週期
218
+
219
+ ### 7.1 Navigation
220
+
221
+ ```mermaid
222
+ stateDiagram-v2
223
+ [*] --> Requested
224
+ Requested --> Fetching
225
+ Fetching --> Redirecting
226
+ Redirecting --> Fetching
227
+ Fetching --> ReadyToCommit
228
+ ReadyToCommit --> Parsing
229
+ Parsing --> Interactive
230
+ Interactive --> Complete
231
+ Requested --> Aborted
232
+ Fetching --> Failed
233
+ Parsing --> Failed
234
+ ```
235
+
236
+ 每次 navigation 必須有唯一 ID、取消訊號、origin、referrer policy、redirect chain 與 response metadata。只有 `ReadyToCommit` 之後才更換 frame 的 active document。hash 變更、history traversal、reload 與 `javascript:` URL 必須走不同分支,不應一律重建 Document。
237
+
238
+ ### 7.2 Document update lifecycle
239
+
240
+ ```text
241
+ DOM mutation
242
+ -> style invalidation
243
+ -> style recalc
244
+ -> render-tree update
245
+ -> layout
246
+ -> prepaint / paint invalidation
247
+ -> display-list rebuild
248
+ -> raster
249
+ ```
250
+
251
+ 每個節點使用 dirty bits 與 generation number,避免每次 DOM 變更都全樹重算。同步讀取 geometry 時才允許「強制 flush」,並在 telemetry 標記 forced style/layout。
252
+
253
+ ### 7.3 Render tree 契約
254
+
255
+ `RenderNode` 不直接等於 DOM Node。它至少包含:
256
+
257
+ - stable node ID 與 DOM back-reference;
258
+ - computed style snapshot;
259
+ - box type(block、inline、flex、grid、table、replaced 等);
260
+ - pseudo element 與 anonymous box;
261
+ - writing mode、direction、containment;
262
+ - children(基於 flat/composed tree);
263
+ - dirty flags、intrinsic sizes、fragment outputs。
264
+
265
+ Layout 輸出不可直接寫回 DOM;應產生 immutable-ish fragments。幾何 Web API 再由 node ID 查詢 fragment index。這能處理一個 DOM node 產生多個 line fragments 的情況。
266
+
267
+ ## 8. Layout 與文字引擎整合策略
268
+
269
+ ### 8.1 先 Dropflow,後 TermDOM
270
+
271
+ 建議順序:
272
+
273
+ 1. 從 Dropflow 移植 block formatting context、inline formatting、line boxes、float、absolute、intrinsic sizing。
274
+ 2. 將 Dropflow 的自有 DOM 輸入改成統一 `RenderNode`/`ComputedStyle` 介面。
275
+ 3. 保留其 HarfBuzz WASM shaping 思路,補 Unicode bidi、line-break、font fallback 與 emoji。
276
+ 4. 從 TermDOM 移植 flex、grid、table 的 constraint solving 與測試案例。
277
+ 5. 將 TermDOM 的整數 cell 座標改為 CSS pixel 浮點/fixed-point;所有百分比、subpixel accumulation、devicePixelRatio 必須重新驗證。
278
+
279
+ ### 8.2 不可直接沿用 TermDOM 幾何
280
+
281
+ TermDOM 的用途是終端機:`1px ≈ 1ch ≈ 一個 cell`。瀏覽器則需要:
282
+
283
+ - CSS px 與 device px 分離;
284
+ - fractional geometry;
285
+ - 字型 ascent/descent/leading;
286
+ - glyph advance 與 kerning;
287
+ - baseline 對齊;
288
+ - transform、zoom、DPR;
289
+ - scroll overflow 與 clip。
290
+
291
+ 因此應移植 constraint/algorithm/test cases,而非讓 TermDOM 當最終 layout backend。
292
+
293
+ ### 8.3 Geometry 回填
294
+
295
+ Happy DOM 目前 geometry 全為 0。應在 `web-platform` adapter 覆寫:
296
+
297
+ - `getBoundingClientRect()` / `getClientRects()`;
298
+ - `offsetTop/Left/Width/Height`;
299
+ - `client*`、`scroll*`;
300
+ - `elementFromPoint()`;
301
+ - Range rects;
302
+ - IntersectionObserver 與 ResizeObserver。
303
+
304
+ 這些 API 只能讀取 layout fragment store,不可各自重算尺寸。
305
+
306
+ ## 9. CSS、Paint 與 CanvasKit
307
+
308
+ ### 9.1 CSS engine
309
+
310
+ 第一階段可沿用 Happy DOM 的 CSSOM/computed style 以快速出成果,但要在 adapter 後面建立統一 `ComputedStyle` schema。中期應導入更完整的 parser/cascade:
311
+
312
+ - origin、importance、cascade layers、specificity、scope、inheritance;
313
+ - custom properties 與 computed-value-time substitution;
314
+ - media/container/supports queries;
315
+ - logical properties、writing modes;
316
+ - style sharing 與 selector invalidation。
317
+
318
+ TermDOM 的 selector/cascade/invalidation 測試很有參考價值,`css-tree` 也可用於 AST 與錯誤恢復,但最終只能有一個 cascade truth source。
319
+
320
+ ### 9.2 Display List
321
+
322
+ 不要讓 layout 直接呼叫 CanvasKit。先產生可序列化、可 snapshot 的 display list:
323
+
324
+ ```ts
325
+ type PaintCommand =
326
+ | { op: 'save' | 'restore' }
327
+ | { op: 'clipRect'; rect: Rect }
328
+ | { op: 'transform'; matrix: Matrix }
329
+ | { op: 'drawRect'; rect: Rect; paint: Paint }
330
+ | { op: 'drawRRect'; rect: Rect; radii: Radii; paint: Paint }
331
+ | { op: 'drawTextRun'; run: ShapedRun; point: Point; paint: Paint }
332
+ | { op: 'drawImage'; imageId: number; src: Rect; dst: Rect }
333
+ | { op: 'beginLayer'; opacity: number; blendMode: string }
334
+ | { op: 'endLayer' };
335
+ ```
336
+
337
+ 如此可同時支援 CanvasKit、debug JSON、reftest inspection,未來也能增加 PDF 或遠端 raster backend。
338
+
339
+ ### 9.3 兩種 Canvas 不要混淆
340
+
341
+ - **Page raster**:DOM/CSS/layout 的最終畫面,由 display list → CanvasKit。
342
+ - **HTMLCanvasElement**:網站腳本可操作的 `<canvas>`;透過 Happy DOM CanvasAdapter 接到獨立 CanvasKit surface。
343
+
344
+ 後者只是頁面中的 replaced element。當它變髒時,將其 surface 當 image 貼入 page display list。
345
+
346
+ ## 10. JavaScript Runtime、WebIDL 與安全模型
347
+
348
+ ### 10.1 建議 process 拓撲
349
+
350
+ ```mermaid
351
+ flowchart LR
352
+ A["Controller<br/>trusted"] -->|"typed IPC"| B["Network<br/>limited"]
353
+ A -->|"typed IPC"| C["Renderer A<br/>untrusted"]
354
+ A -->|"typed IPC"| D["Renderer B<br/>untrusted"]
355
+ C -->|"request only"| B
356
+ D -->|"request only"| B
357
+ ```
358
+
359
+ - Controller 持有 headless API、process 管理與 policy,不執行 page JS。
360
+ - Renderer 以不同 OS process 運行,降權、限制 filesystem/network/syscall;理想上以 site/origin group 分配。
361
+ - Renderer 使用 Bun/JSC,讓 page JS、DOM、style、layout 留在同一 heap,避免同步 DOM API 經過 RPC。
362
+ - `node:vm`、`ShadowRealm` 與 Bun Worker 只提供執行環境隔離;Bun 1.4.3 實測中,`ShadowRealm` 仍可取得 `process` 與 `Bun`,不得標示為 security sandbox。
363
+ - 不可信頁面至少使用 `Bun.spawn()` 建立 renderer subprocess,傳入白名單 env、受控 cwd、專用 IPC、deadline 與 crash/kill recovery;可用時再以 uid/gid 及平台 sandbox 限制 filesystem、network 與 syscall。
364
+ - 在平台 sandbox 完成前,只能承諾 crash/resource isolation,不能宣稱可安全執行任意遠端 JavaScript。
365
+ - Network service 是 renderer 唯一對外通道,執行 allow/deny、SSRF 防護、DNS/IP policy、redirect policy、下載上限。
366
+ - iframe 的跨 origin 關係以 proxy/window handle 表達;不要把另一 renderer 的真實物件直接暴露。
367
+
368
+ ### 10.2 DOM 與 JS 邊界
369
+
370
+ DOM 與 page JS 應共存於同一個 renderer process/JSC heap;browser controller 只交換粗粒度訊息。建議:
371
+
372
+ - Happy DOM 必須包在 adapter 後面;不要把其內部 class 暴露成 layout 或 IPC 契約;
373
+ - DOM object 在 renderer 內保留 identity;controller 與 CDP 只持有 stable opaque handle;
374
+ - 常用 getter 在 renderer 內直接呼叫,避免細粒度 RPC;
375
+ - navigation、resource、input、frame、lifecycle、screenshot 等訊息才跨 process;
376
+ - remote handle 使用 weak registry + generation,避免 use-after-free;
377
+ - 所有 callback、Promise job、timer 進入統一 scheduler;
378
+ - controller 對 navigation/task 設 deadline;超時時終止並重建 renderer process。
379
+
380
+ ### 10.3 最低安全要求
381
+
382
+ - 不在 controller/PID 1 執行頁面 JS。
383
+ - renderer 以非 root 使用者執行,唯讀或空 filesystem view。
384
+ - 限制 CPU、memory、process、file descriptor、response body、redirect 數。
385
+ - 預設阻擋 link-local、metadata endpoint、loopback 與 private network;測試環境顯式開放。
386
+ - CORS、CORP、COEP、CSP、mixed-content、SameSite cookie 由集中 policy 層判斷。
387
+ - origin key 必須包含 scheme/host/port;opaque origin 使用不可猜 token。
388
+ - IPC schema 嚴格驗證,不接受任意 object deserialization。
389
+ - renderer crash/timeout 只終止該 page/site,不拖垮 controller。
390
+
391
+ ## 11. Resource、Script 與事件排程
392
+
393
+ 要修正本次發現的 `DOMContentLoaded` 問題,必須把載入行為建模,而非依賴零散 callback:
394
+
395
+ | 資源 | parser 是否等待 | 執行/套用時機 |
396
+ |---|---:|---|
397
+ | classic script 無 async/defer | 是 | fetch 完成後立即依序執行,再恢復 parser |
398
+ | `defer` / module | 否 | parse 完成後依 document order;在 DOMContentLoaded 前 |
399
+ | `async` | 否 | fetch 完即執行,不保證順序 |
400
+ | stylesheet | 影響特定 script | 進入 CSSOM 後觸發 style invalidation |
401
+ | image | 否 | decode 後更新 intrinsic size,可能重新 layout |
402
+ | iframe | 父 parser 通常不等待 | 建立 child navigation;父 load 要追蹤 child load |
403
+
404
+ Scheduler 至少要有 task、microtask、timer、network completion、render opportunity 五類 queue。每次 task 後 drain microtasks;符合條件時才跑 rendering update。測試要明確記錄 event order。
405
+
406
+ ## 12. Headless API 與 CDP
407
+
408
+ 原生 JS API 與最小 CDP adapter 共用同一套 Browser/Page 核心。CDP 從 Day 1 就要可被 `../casty` 驅動,但不追求完整 DevTools:
409
+
410
+ ```ts
411
+ const browser = await launch({ sandbox: true });
412
+ const context = await browser.newContext({ viewport: { width: 1280, height: 720 } });
413
+ const page = await context.newPage();
414
+ await page.goto(url, { waitUntil: 'networkidle' });
415
+ await page.click('button');
416
+ await page.screenshot({ path: 'page.png' });
417
+ ```
418
+
419
+ CDP 第一批 domain:
420
+
421
+ - `Target`:page/session 管理;
422
+ - `Page`:navigate、lifecycle、screenshot;
423
+ - `Runtime`:evaluate、remote object handles;
424
+ - `DOM`:document/query/attributes;
425
+ - `Network`:events、headers、interception;
426
+ - `Input`:mouse/keyboard/touch basics;
427
+ - `Emulation`:viewport、DPR、media、timezone 的可行子集;
428
+ - `Log` / `Console`:診斷。
429
+
430
+ Day-1 `casty` contract 至少涵蓋 discovery(`/json/version`、`/json/list`、`/json/new`)、browser/page WebSocket、`Target.createTarget`、`Page.enable`、`Page.navigate`、`Emulation.setDeviceMetricsOverride`、`Network.setUserAgentOverride`、`Page.addScriptToEvaluateOnNewDocument`、`Page.captureScreenshot`,以及 screencast start/frame/ack/stop。測試直接取自 `../casty` 的實際 command/event 集合,避免方法雖存在但 transport、session 或事件時序不相容。
431
+
432
+ 所有 wait API 應依 lifecycle/network/scheduler 狀態,不可用固定 sleep。
433
+
434
+ ## 13. 分階段路線圖與退出標準
435
+
436
+ ### Phase 0 — 基線與架構護欄(2–3 週)
437
+
438
+ - 建 monorepo、typed IPC、fixture server、WPT runner、expected-fail manifest。
439
+ - 將目前 Happy DOM 測試固定為 regression suite。
440
+ - 定義 ComputedStyle、RenderNode、Fragment、DisplayList schema。
441
+ - 禁止 remote JS 進入 trusted process,加入 constructor-escape 安全測試。
442
+ - 建立 `casty` CDP contract test,先打通 discovery、target/session、navigate 與一張靜態 placeholder screenshot。
443
+
444
+ **退出標準**:CI 可重現所有本次結果;死鎖測試有 timeout;不可信 renderer 無 controller secrets/capabilities;`casty` 能透過 CDP 建立 target、navigation 並收到 placeholder frame。平台 sandbox 未完成時須明確標記 remote script mode 為 unsafe/disabled。
445
+
446
+ ### Phase 1 — 靜態文件到 PNG(4–6 週)
447
+
448
+ - HTML/CSS/image 載入。
449
+ - block boxes、background、border、simple inline/text。
450
+ - CanvasKit CPU surface 與 screenshot。
451
+ - 初版 geometry API。
452
+ - `Page.captureScreenshot` 回傳實際 raster 結果,並以 screencast event 在畫面變更時推送 frame。
453
+
454
+ **退出標準**:20–50 個自製 reftest 穩定;同一輸入 PNG deterministic;無 script 頁面可截圖。
455
+
456
+ ### Phase 2 — Inline/text 與常用 layout(6–10 週)
457
+
458
+ - HarfBuzz shaping、font fallback、bidi、line breaking。
459
+ - float、absolute、overflow、scroll。
460
+ - flex,再做 grid/table。
461
+ - hit testing、focus、selection、input dispatch。
462
+
463
+ **退出標準**:指定 CSS2/flex/grid WPT 子集達門檻;幾何 API 與 screenshot 一致;CJK/Arabic/emoji 有 goldens。
464
+
465
+ ### Phase 3 — 安全 JavaScript 與正確 lifecycle(6–10 週)
466
+
467
+ - Bun renderer subprocess、Happy DOM adapter 與 page realm bootstrap。
468
+ - parser-blocking、async/defer/module、tasks/microtasks/timers。
469
+ - fetch/XHR、DOM events、Mutation/Resize/Intersection observers。
470
+ - 修正 data URL/referrer 與 DOMContentLoaded/load 時序。
471
+
472
+ **退出標準**:constructor escape 無宿主能力;失控 loop 能中止;script/event-order 測試通過;renderer crash 可恢復。
473
+
474
+ ### Phase 4 — Frames、origin、storage、navigation(6–8 週)
475
+
476
+ - iframe、WindowProxy、postMessage、same-origin policy。
477
+ - cookies、local/session storage;IndexedDB 可後移。
478
+ - history、reload、same-document navigation、redirect/cancel。
479
+ - CSP/CORS/mixed content/SSRF policy。
480
+
481
+ **退出標準**:多 frame 測試、跨 origin 負面測試、cookie/cache test matrix 通過。
482
+
483
+ ### Phase 5 — 擴充自動化產品(4–6 週)
484
+
485
+ - Page/Locator API、waits、screenshots、PDF 初版。
486
+ - 擴充 CDP domains、remote object lifecycle 與 diagnostics;基本 `casty` contract 已在 Phase 0–1 完成。
487
+ - trace、network log、DOM/layout/display-list dump。
488
+ - process pools、resource quota、deterministic mode。
489
+
490
+ **退出標準**:可驅動一組真實但受控的 benchmark sites;錯誤具診斷性;24 小時 soak 無顯著 leak。
491
+
492
+ ### Phase 6 — 相容性與效能(持續)
493
+
494
+ - 擴大 WPT、CSS features、accessibility tree。
495
+ - incremental style/layout/paint、layer caching、worker raster。
496
+ - profiling、memory snapshots、fuzzing。
497
+
498
+ 影音、WebRTC、WebGL/WebGPU 應另立專案評估,不應阻塞一般 headless automation v1。
499
+
500
+ ## 14. 驗證策略
501
+
502
+ 測試金字塔:
503
+
504
+ 1. **Pure unit tests**:tokenizer、CSS values、constraint math、URL/origin、IPC validation。
505
+ 2. **Algorithm fixtures**:從 Dropflow/TermDOM 合法移植的 layout cases。
506
+ 3. **Lifecycle integration**:navigation、parser/script/event order、frame、network。
507
+ 4. **Reftest**:HTML 渲染與 reference PNG/HTML 比較;設定可解釋的 pixel tolerance。
508
+ 5. **WPT**:先 `dom`、HTML parsing/forms、fetch/XHR/cookies,再 CSS2/flex/grid。
509
+ 6. **Differential**:同一 fixture 與 Chromium 比 DOM snapshot、geometry、events、PNG。
510
+ 7. **Security/fuzz**:HTML/CSS parser、IPC、image/font、constructor escape、resource bombs。
511
+ 8. **Soak/perf**:重複 navigation、page churn、large DOM、memory/handle leak。
512
+
513
+ 每次 CI 輸出:pass/fail/timeout/crash、首次回歸 commit、WPT 分類、screenshot diff、峰值 RSS、JS heap、layout/paint 時間。不得只公布總 pass rate,因為跳過大量測試會製造假進度。
514
+
515
+ ## 15. 風險清單與緩解
516
+
517
+ | 風險 | 等級 | 緩解 |
518
+ |---|---|---|
519
+ | Web 相容面遠大於預估 | 極高 | 嚴格 v1 scope、WPT allowlist、垂直切片交付 |
520
+ | Happy DOM lifecycle 與真瀏覽器不一致 | 高 | adapter 隔離;自有 navigation/parser scheduler;可逐步替換 |
521
+ | Bun realm 暴露宿主能力 | 極高 | 不把 realm/Worker 當 sandbox;不可信頁面置於最小權限 subprocess;平台 sandbox 前預設關閉 remote script |
522
+ | TermDOM 幾何模型不適合像素 | 高 | 只移植演算法/測試;統一 float/fixed CSS px |
523
+ | 文字 shaping/font fallback 複雜 | 高 | 優先 HarfBuzz;建立多語 golden corpus |
524
+ | CanvasKit WASM 體積與記憶體 | 中高 | lazy init、surface reuse、resource cache、budget |
525
+ | node:vm/ShadowRealm sandbox escape | 極高 | 禁用於 trusted process 的遠端頁面;Bun subprocess + resource limits + 平台 sandbox |
526
+ | 自建 network stack 漏掉安全政策 | 高 | 集中 Network Service;預設 deny private targets;規則測試 |
527
+ | Fork 多個上游難維護 | 高 | 以 adapter/port 為主;記錄來源 commit、license、修改清單 |
528
+ | 追求 CDP 全相容拖慢核心 | 中 | 先 native API;只做實際需要的 domain/method |
529
+
530
+ ## 16. 授權與來源管理
531
+
532
+ Happy DOM、TermDOM、Dropflow 等目前檢視到的是寬鬆授權專案,但移植任何程式碼前仍要逐一核對 LICENSE、第三方目錄與檔案 header。每個 port 建議保留:
533
+
534
+ - upstream repository、commit、原始檔案路徑;
535
+ - 授權文字與 copyright notice;
536
+ - 修改說明;
537
+ - 對應測試來源;
538
+ - 是否為 clean-room reimplementation 或 derivative code。
539
+
540
+ Chromium/Blink 原始碼主要作架構與行為參考;若直接移植程式碼,必須遵守 Chromium/Blink 對應檔案的 BSD/LGPL 或第三方授權,不能只假設整棵 repo 是同一授權。
541
+
542
+ Happy DOM 以 `vendor/happy-dom` 固定在官方 tag `v20.14.5`(commit `0d4cdbe7442af49d16b49ddf1acf7cc9684ed318`),作為可重現的 DOM/Web API 上游基線。整合原則仍是 adapter-first:引擎程式只依賴本專案定義的介面,不直接散佈對 Happy DOM internal class 的 import。只有確定需要修改 parser/lifecycle hook 時才維護小型 patch queue,並記錄 upstream file、commit、修改原因與對應測試;不要把整份上游改造成不可更新的長期 fork。
543
+
544
+ ## 17. 第一個可執行 Sprint
545
+
546
+ 建議立刻做以下垂直切片,而不是先寫更多抽象介面:
547
+
548
+ 1. 建 `Browser → Context → Page → Frame` 最小 API。
549
+ 2. Network fixture server 永遠放獨立 process,加入 10 秒 timeout。
550
+ 3. 將 Happy DOM 包在 `web-platform` adapter,不讓 layout import 其內部 class。
551
+ 4. 定義 `ComputedStyleSnapshot`、`RenderNode`、`Fragment`、`DisplayList`。
552
+ 5. 支援 `body/div/span/text/img`、block/inline、margin/padding/border/background。
553
+ 6. CanvasKit 輸出 800×600 PNG。
554
+ 7. 讓 `getBoundingClientRect()` 查 fragment store,移除全 0。
555
+ 8. 建 20 個 Chromium differential reftest。
556
+ 9. 頁面 JS 暫時預設關閉;同時建立 isolated renderer prototype。
557
+ 10. 將本次 external script、module、fetch、iframe、data URL、DOMContentLoaded、escape 測試納入 CI。
558
+ 11. 以 `../casty` 建立 CDP smoke test:target → navigate → viewport → screenshot/screencast → input。
559
+
560
+ Sprint demo 應是一個包含外部 CSS、圖片、inline text wrapping 的頁面,能產出 PNG、DOM snapshot、layout tree、display list JSON;第二個 demo 才開啟隔離 JS 修改 DOM 並觸發增量重繪。
561
+
562
+ ## 18. 決策準則
563
+
564
+ 遇到新功能或上游套件時,用以下順序判斷:
565
+
566
+ 1. 它屬於 DOM、style、layout、paint、runtime、network 哪一層?
567
+ 2. 是否會引入第二份 authoritative state?若會,拒絕或改 adapter。
568
+ 3. 不可信輸入在哪個 process 解析/執行?權限是否最小?
569
+ 4. 能否用 WPT、reftest 或 Chromium differential 測量?
570
+ 5. 能否先做窄但端到端的實作,而不是一次追求全規範?
571
+ 6. 上游更新時,port 的維護成本是否可接受?
572
+
573
+ ## 19. 最終建議
574
+
575
+ 最穩健的產品策略不是「用 JavaScript 重寫 Chromium」,而是建立一個針對 automation、server rendering、testing 與受控網頁的現代 headless engine:以 Happy DOM 快速取得 Web API 覆蓋,以 Dropflow/TermDOM 補 layout 演算法,以 CanvasKit 取得可靠 raster,以 Bun renderer subprocess 與平台 sandbox 建立權限邊界,再用 Chromium 的責任分層和 WPT 約束正確性。
576
+
577
+ 若團隊只有 1–3 人,先把 v1 鎖在 HTML/CSS/JS automation 與 screenshot;不要承諾完整影音、GPU、DRM。只要 Render Tree、lifecycle、sandbox、testing 四個基礎一開始做對,後續相容性可以迭代;若這四項欠債,功能越多,重寫成本越高。
578
+
579
+ ## 20. 官方參考資料
580
+
581
+ - Chromium:[Process Model and Site Isolation](https://chromium.googlesource.com/chromium/src/+/main/docs/process_model_and_site_isolation.md)
582
+ - Chromium:[Multi-process Architecture](https://chromium.googlesource.com/playground/chromium-org-site/+/refs/heads/main/developers/design-documents/multi-process-architecture/index.md)
583
+ - Chromium:[Life of a URL Request](https://chromium.googlesource.com/chromium/src/+/refs/heads/main/net/docs/life-of-a-url-request.md)
584
+ - Blink:[DOM / Flat Tree](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/dom/README.md)
585
+ - Blink:[Layout](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/layout/README.md)
586
+ - Blink:[Paint](https://chromium.googlesource.com/chromium/src/+/HEAD/third_party/blink/renderer/core/paint/README.md)
587
+ - Chromium:[Headless](https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/browser/headless/)
588
+ - Chromium:[Sandbox Design](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/design/sandbox.md)
589
+ - Chromium:[Official source mirror](https://github.com/chromium/chromium)
590
+ - Web Platform Tests:[web-platform-tests/wpt](https://github.com/web-platform-tests/wpt)
591
+
592
+ ---
593
+
594
+ ### 附錄:本次測試檔案
595
+
596
+ - `happy-test/test.mjs`:DOM、computed style、script、module、iframe、data URL、canvas adapter。
597
+ - `happy-test/http-client.mjs`:完整 HTTP、外部 CSS/JS/module、fetch、image、iframe。
598
+ - `happy-test/module-edge.mjs`:top-level await、export destructuring。
599
+ - `happy-test/security.mjs`:constructor escape 與宿主能力洩漏。
600
+
601
+ 這些測試應在新 repository 初始化時原封不動保存為 baseline,再逐步改成對新 engine API 的黑箱測試。
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Dr. John (醫者小智)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.